我有这两个表:
表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
Run Code Online (Sandbox Code Playgroud)
表ITEM:
ID FILENAME
99 abc
100 def
101 geh
102 ijk
Run Code Online (Sandbox Code Playgroud)
column 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
Run Code Online (Sandbox Code Playgroud)
那么有没有其他可能获得具有SWID 1和2的所有条目(为每个SWID创建连接也不是一个选项 - 因为有很多条目它会非常慢)
亲切的问候
Yan*_*ang 10
您需要使用DISTINCTin COUNT而SWID不是ITEM_ID:
SELECT ITEM_ID FROM SW_ITEM
WHERE SWID IN (1,2)
GROUP BY ITEM_ID
HAVING COUNT(DISTINCT SWID) = 2;
Run Code Online (Sandbox Code Playgroud)
请查看此演示.
要检索所有文件名,请尝试:
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;
Run Code Online (Sandbox Code Playgroud)