我有这两张桌子:
表SW_ITEM
:
ID SWID ITEM_ID
1 1 99
2 2 99
3 5 99
4 2 100
5 1 100
6 1 101
7 2 102
表ITEM
:
ID FILENAME
99 abc
100 def
101 geh
102 ijk
列ITEM_ID
是表ID
的列ITEM
的外键。
所以我想要所有SWID为“1”和“2”的文件名(即ITEMID 99和100,所以他们的文件名是“abc”和“def”)
这里我要说ITEM_ID
有多个条目可能有相同的SWID,所以我不能使用这个SQL:
SELECT ITEM_ID FROM SW_ITEM
WHERE SWID IN (1,2)
GROUP BY ITEM_ID
HAVING COUNT(ITEM_ID) = 2
还有其他任何可能获得SWID 1和2的所有条目(为每个SWID创建一个连接也不是一个选项 - 因为有很多条目它会非常慢)
亲切的问候
答案 0 :(得分:10)
您需要在DISTINCT
中使用COUNT
并计算SWID
而不是ITEM_ID
:
SELECT ITEM_ID FROM SW_ITEM
WHERE SWID IN (1,2)
GROUP BY ITEM_ID
HAVING COUNT(DISTINCT SWID) = 2;
请结帐this demo。
要检索所有文件名,请尝试:
SELECT ITEM_ID, FILENAME
FROM ITEM JOIN SW_ITEM ON ITEM.ID = SW_ITEM.ITEM_ID
WHERE SWID IN (1,2)
GROUP BY ITEM_ID
HAVING COUNT(DISTINCT SWID) = 2;
答案 1 :(得分:0)
我有一个不同的问题,我必须根据电子邮件在同一张表中找到有多个条目的人,因为上述解决方案对我不起作用。您可以尝试使用以下内容
SELECT person_id,
(ROW_NUMBER () OVER (PARTITION BY pers_email ORDER BY pers_name) person_count
from pers_table
WHERE person_count > 2;
试试这个希望它有效:)