2016-05-17 166 views
0

我一直試圖弄清楚這很長一段時間,似乎不能得到它。我有兩個表,並需要從表1 DISTINCT僅在表2中的比賽全部列的標準,下面是桌子的樣子:從表格中選擇其他行中所有列的行

Table 1 
ACR  OCD 
sea  123 
sea  456 
sfo  678 
sfo  890 

Table 2 
OCD  SWITCH 
123  Y 
456  N 
678  Y 
890  Y 

我試圖寫一個select語句,將返回表1。 ACR,只要所有開關都設置爲Y,對於屬於表1中的ACR的所有OCD。因此,利用該數據示例,它將返回sfo,因爲表2中的OCD 678和890都被設置爲Y.

我試過了:

SELECT t1.acr 
FROM table1 t1 
WHERE t1.ocd NOT IN (SELECT DISTINCT t1.ocd 
        FROM table1 t1 
         JOIN table2 t2 ON t1.ocd=t2.ocd 
        WHERE t2.swtich = 'Y'); 

返回:

sea 
sfo 
sfo 
+0

如果一個ACR在表2中沒有行? – jarlh

+0

好問題,但在這種情況下,這是不可能的 – ssgtob1

回答

1

試試這個:

SELECT t1.acr 
FROM table1 t1 
    LEFT JOIN table2 t2 on t2.ocd = t1.ocd AND t2.switch = 'Y' 
GROUP BY t1.acr 
HAVING COUNT(t2.ocd) = COUNT(t1.ocd) 
+0

完美的作品!只是改變它以匹配我的實際表...現在唯一的問題是table1可能比table2更多的OCD,因爲我們有一個clos_dt我們可以關閉一個。 – ssgtob1

+0

我假設clos_dt是關閉的日期。您可以在WHERE子句中通過clos_dt過濾table1:'WHERE clos_dt IS NULL' –

+0

或者如果您不想顯示錶2中不存在的OCD,請在HAVING子句中添加另一個條件:'HAVING COUNT(t2.ocd)= COUNT(t1.ocd)和COUNT(t2.ocd)> 0' –

相關問題