我正在尝试查找分配给多个位置的ID。注意26和28的ID有多条记录,但具有相同的loc
,因此我不希望它们出现在结果集中。数据可能如下所示:
Id | loc
-------
23 | A
23 | B
24 | A
25 | A
26 | A
26 | A
27 | A
27 | B
28 | B
28 | B
29 | A
29 | B
我目前正在做的是:
Select id
FROM (
Select id, loc, count(*)
from tbl
GROUP BY id, loc
HAVING COUNT(*)>1
) grped
GROUP BY id
HAVING COUNT(*)>1
我试图返回这些ID:
Id
--
23
27
29
答案 0 :(得分:1)
您正在寻找包含多个位置的ID:
select id
from tbl
group by id
having count(distinct loc) > 1;
答案 1 :(得分:0)
这解决了“我正在尝试查找分配给多个位置的ID。”的目标。
一种简单的方法是使用一个group by
:
select id
from tbl
group by id
having min(loc) <> max(loc);
注意:这与您的逻辑略有不同,因为它会忽略NULL
个值,而您的版本会将NULL
个locs视为另一个值。可以修改上述内容以考虑到这一点:
select id
from tbl
group by id
having (min(loc) <> max(loc)) or
(min(loc) is not null and count(loc) <> count(*))