小编典典

MySQL返回联接表的第一行

sql

我有两个表(“国家/地区”和“鸭子”),其中“国家/地区”表包含世界上每个国家/地区,并且“鸭子”表中有一个鸭子列表,其中有一个country_id字段可链接到主要国家/地区。

我正在尝试获取仅包含至少一只鸭子的国家/地区列表,并从鸭子表中找到该国家内评分最高的鸭子的单个匹配记录。到目前为止,我有:

SELECT *
FROM country c 
INNER JOIN ducks d ON c.id = d.country_id
ORDER BY c.country ASC, d.rating DESC

这将返回每只鸭子的列表,而不是每个国家/地区的列表。

如果有人能指出我正确的方向,我将不胜感激。我宁愿在SQL中执行此操作,也不愿为每个国家/地区单独查询以拔出最受好评的鸭子。


阅读 137

收藏
2021-03-23

共1个答案

小编典典

SELECT c., d.
FROM country c
INNER JOIN ducks d
ON d.id = — guessing the ducks Primary Key here
( SELECT dd.id — and here
FROM ducks dd
WHERE c.id = dd.country_id
ORDER BY dd.rating DESC
LIMIT 1
)

(country_id, rating, id)MyISAM表或(country_id, rating)InnoDB表的索引对您有所帮助。

该查询将只显示一个duck国家/地区的一个查询,即使有多个具有相同评级的查询也是如此。如果您希望出现并列等级的鸭子,请使用@imm的GROUPBY答案。

2021-03-23