2017-05-31 22 views
0

給予表一涉及到行:從左表中選擇行時,在右表

I1 
I2 
I3 
I4 

,第二個表C:

C1 
C2 
C3 

而第三CI:

I1 C2 
I1 C3 
I2 C2 
I3 C2 
I3 C3 
I4 C2 
I4 C3 

任何關於SQL請求的想法,只給出所有第一個表共有的行,如下面的結果:

C2 

另一組是這樣的:

I1 C2 
I1 C3 
I2 C2 
I3 C3 
I4 C2 
I4 C3 

的結果將是空的。 和

I1 
I2 
I3 
I4 
I5 

I1 C2 
I1 C3 
I2 C2 
I3 C2 
I3 C3 
I4 C2 
I4 C3 

reuslt:空

*參見討論

謝謝。

+3

GROUP BY,HAVING,COUNT [DISTINCT] – jarlh

回答

3

你可以使用NOT EXISTS

SELECT * 
FROM TableC c 
WHERE NOT EXISTS ( SELECT 1 
        FROM TableI i 
        WHERE NOT EXISTS ( SELECT 1 FROM TableCI ci 
             WHERE ci.I = i.I 
               AND ci.C = c.C 
            ) 
       ) 

或者GROUP BY, HAVING, COUNT [DISTINCT]作爲jarlh的建議

DECLARE @NumberI int = (SELECT count(*) FROM TableI) 

SELECT c.C 
FROM TableC c 
INNER JOIN TableCI ci ON c.C = ci.C 
INNER JOIN TableI i ON ci.I = i.I 
GROUP BY c.C 
HAVING COUNT(DISTINCT ci.I) = @NumberI 
+0

我'INNER JOIN TableI'檢查ci.I必須在表Ⅰ – TriV

+0

第二個解決方案似乎除非一個工作正常第一個表的元素不與第二個表中的任何元素關聯,如:I5 NULL – Tuximo

+0

在這種情況下,COUNT(DISTINCT ci.I)= @ NumberI'如何?它不會存在於結果集中。 – TriV

0

你可以使用: WHERE EXISTS(子查詢)

0

所以你要顯示的第二列僅當此列中的值與表I中存在的所有記錄相關聯時才使用表CI?

如果是這樣的話,你可以這樣做:

select Col2 from (select Col2 , count(Col1) As Expr1 from CI group by Col2) A 
where Expr1 = (select count(*) from I) 
0

這裏有一個簡單的解決方案的基本前提是:
我們只想要與C的記錄,爲此,COUNT DISTINCT他們我的記錄應該是一樣的計數不同的我記錄爲整個表

  select TBL.C, count(distinct TBL.I) 
      from TBL 
      group by TBL.C 
      having count(distinct TBL.I)= (select count(distinct TBL.I) from TBL) 

在Oracle中,這裏是查詢和結果集

  with TBL 
      as 
      (
      select 'I1' I,'C2' C from dual 
      union all 
      select 'I1','C3' from dual 
      union all 
      select 'I2','C2' from dual 
      union all 
      select 'I3','C2' from dual 
      union all 
      select 'I3','C3' from dual 
      union all 
      select 'I4','C2' from dual 
      union all 
      select 'I4','C3' from dual 
      ) 

      select TBL.C, count(distinct TBL.I) 
      from TBL 
      group by TBL.C 
      having count(distinct TBL.I)= (select count(distinct TBL.I) from TBL) 

結果集:

C2 4 
相關問題