2017-09-14 139 views
1

我是新來的sql請協助。SQL查詢 - 獲取左表中的所有匹配記錄和剩餘記錄

表TEST1:

ID 
1 
2 
3 

表測試2:

ID STATUS 
1 DONE 
2 FAILED 

我需要如下(以test1的匹配狀況以及所有ID的所有行的ResultSet不TEST2,條件是狀態!='DONE')

2 
3 

使用左連接,內連接等我可以很容易地得到輸出爲2或1,2,3但是ge 2,3是一個挑戰。請協助。請注意,上面是一個示例數據。原諒通過手機發布格式錯誤,無法從辦公室的瀏覽器發佈。

+0

是不是在'test1'用'test1'一樣每一行這不匹配的所有行合併的所有行? –

+0

添加條件 – learner

回答

1

假設ID是兩個表中的主鍵,你可以使用左外連接,並要求排在idNULL

SELECT t1.ID 
FROM test1 t1 
LEFT OUTER JOIN test2 t2 ON t1.ID=t2.ID 
WHERE t2.STATUS <> 'Done' OR t2.ID IS NULL 

OR條件左半部分是你原來的WHERE條款;右側添加行而不是匹配test2

+0

如果一個'id'在'test2'中可能有多個狀態(並且一個已完成,另一個未完成),則這將不起作用。 –

+0

@GordonLinoff我假設ID是兩個表中的主鍵。 – dasblinkenlight

1

您想要test1中的所有ID都不是test2中的「完成」。我建議NOT EXISTS

select t1.id 
from test1 t1 
where not exists (select 1 
        from test2 t2 
        where t2.id = t1.id and t2.status = 'DONE' 
       ); 
+0

非常感謝您的回覆。 – learner

相關問題