2017-01-12 52 views
0

存在我有3個表 - domains, keywords, commentsSQL連接3個表時,沒有符合條件的記錄2個表

domains是「主」之一,所有這些表都具有共同的領域domain_id。如果在其他表(keywordscomments)中沒有匹配記錄,我需要編寫一個查詢,以便從domains表中選擇記錄。

我寫沒有問題選擇匹配記錄的查詢,但如何實現相反?望着How to do LEFT JOIN with more than 2 tables?我寫了一條查詢:

SELECT * FROM domains 
LEFT JOIN keywords ON domains.domain_id=keywords.domain_id WHERE keywords.domain_id IS NULL 
LEFT JOIN comments ON domains.domain_id=comments.domain_id WHERE comments.domain_id IS NULL 

它部分工作。它選擇在keywords表中沒有匹配的記錄,但忽略comments表。所以,根據我發現的其他話題,寫道:

SELECT * FROM 
(domains LEFT JOIN keywords ON domains.domain_id=keywords.domain_id WHERE keywords.domain_id IS NULL) 
LEFT JOIN comments ON domains.domain_id=comments.domain_id WHERE comments.domain_id IS NULL 

這一個根本沒有工作(語法錯誤)。我如何修改查詢以完成工作?我想第一個查詢應該差不多OK ......

回答

1

廣場畢竟where條款加入像下面

如果您想選擇domains它不能在任意兩個表keywordscomments的存在,然後用OR條件WHERE條款

SELECT * FROM domains 
LEFT JOIN keywords ON domains.domain_id=keywords.domain_id 
LEFT JOIN comments ON domains.domain_id=comments.domain_id 
WHERE keywords.domain_id IS NULL 
OR comments.domain_id IS NULL 

如果要選擇不表keywordscomments既存在domains,只需更換OR條件WHERE子句AND像下面

SELECT * FROM domains 
LEFT JOIN keywords ON domains.domain_id=keywords.domain_id 
LEFT JOIN comments ON domains.domain_id=comments.domain_id 
WHERE keywords.domain_id IS NULL 
AND comments.domain_id IS NULL 
+0

這就是它!謝謝,工作正常。 –