SQL选择具有多个值的行

rim*_*mes 5 sql select

我有这两个表:

表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)

演示