2016-02-05 89 views
2

我不確定如何做到這一點,因爲我的講義告訴我在SQL中使用「EXCEPT」,但MYSQL似乎不支持這一點。我一直在想我應該使用「WHERE NOT IN」作爲替代方案,但是我的問題是我需要比較的這兩列具有不同的名稱。MySQL - 從另一個減去一個查詢集

這裏是我的不正確的查詢:

(SELECT id FROM projects) WHERE id NOT IN (SELECT project_id FROM projects_viewed); 

我想選擇其中ID列沒有出現在「projects_viewed」表的表「項目」的所有行。但是該列被稱爲「project_id」而不是「id」,因爲它是一個外鍵。

基本上這背後的邏輯是,從這個查詢返回的結果集應該是所有沒有被查看過的項目ID(第二個表中的)。

回答

2

有幾種方法可以做到這一點。下面是使用一個的outer joinnull檢查:

select p.id 
from projects p 
    left join projects_viewed pv on p.id = pv.project_id 
where pv.project_id is null 

,另一個not in

select id 
from projects 
where id not in (select project_id from projects_viewed) 

我覺得這些方法在mysqlnot exists更有效。

+0

非常感謝。我會嘗試測試第一個例子,因爲這看起來很有希望:) – Mayron

+0

完美工作,謝謝! – Mayron