从多行获取具有最低id的行?

时间:2014-03-14 14:06:09

标签: mysql

我有一个包含多个列的表,其中一个是entity_id(PK)和parent_id。 parent_id是一个FK,它可以使用不同的entity_id多次出现。现在,有没有办法说"选择表的那一行,其中entity_id对于给定的parent_id来说是最低的"?

这样的事情:

select * from my_table where entity_id = min(entity_id) and parent_id = 123;

希望你知道我的意思吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

select 
   * 
from my_table 
where entity_id = (SELECT min(entity_id) FROM my_table WHERE parent_id = 123);

答案 1 :(得分:1)

您可以使用简单的子查询来完成;

SELECT * 
FROM my_table 
WHERE entity_id = (SELECT MIN(entity_id) FROM my_table WHERE parent_id = 123);

...或者,显然不是LEFT JOIN来查找没有相同parent_id和较小entity_id的行的所有行;

SELECT a.* 
FROM my_table a
LEFT JOIN my_table b ON a.parent_id = b.parent_id AND a.entity_id > b.entity_id
WHERE b.entity_id IS NULL AND a.parent_id = 123;

A simple SQLfiddle to show both

后者也可用于通过省略parent_id为123的条件,一次为所有parent_id找到最小的entity_id。