我有一个包含多个列的表,其中一个是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;
希望你知道我的意思吗?
谢谢!
答案 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。