6

我有这两张桌子:

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

column是tableITEM_ID列的外键。IDITEM

所以我想要所有具有 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 创建连接也不是一种选择 - 因为有很多条目会非常慢)

亲切的问候

4

2 回答 2

15

您需要使用DISTINCTinCOUNT和 countSWID而不是ITEM_ID

SELECT ITEM_ID FROM SW_ITEM
WHERE  SWID IN (1,2) 
GROUP  BY ITEM_ID
HAVING COUNT(DISTINCT SWID) = 2;

请查看此演示

要检索所有文件名,请尝试:

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;

演示

于 2013-07-29T16:14:33.727 回答
1

我有一个不同的问题,我必须根据电子邮件在同一个表中找到一个具有多个条目的人,因为上述解决方案对我不起作用。您可以尝试使用以下内容,

SELECT person_id, 
(ROW_NUMBER () OVER (PARTITION BY pers_email ORDER BY pers_name) person_count  
from pers_table
WHERE person_count > 2;

试试这个希望它有效:)

于 2017-08-17T18:09:12.550 回答