我有两个表(country& ducks),其中country table包含世界上的每个国家/地区,ducks表中有一个duckse列表,其中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中执行它而不是为每个国家/地区单独查询以获得最高级别的鸭子.
解决方法:
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
)
MyISAM表的(country_id,rating,id)或InnoDB表的(country_id,rating)的索引会有所帮助.
此查询将仅显示每个国家/地区的一只鸭子,即使有多个具有相同的评级.如果你想要出现绑定评级的鸭子,请使用@ imm的GROUP BY答案.
标签:php,sql,mysql,join,greatest-n-per-group
来源: https://codeday.me/bug/20191006/1860955.html