簡體   English   中英

SQL選擇具有多個值的行

[英]SQL Selecting rows with multiple values

我有這兩個表:

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是表ITEM的列ID的外鍵。

所以我想要所有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創建連接也不是一個選項 - 因為有很多條目它會非常慢)

親切的問候

您需要在COUNT使用DISTINCT並計算SWID而不是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;

演示

我有一個不同的問題,我必須在同一個表中找到一個基於電子郵件的多個條目的人 ,因為上述解決方案對我不起作用。 您可以嘗試使用以下內容,

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

試試這個希望它有效:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM