2017-06-14 62 views
0

我想加入兩個表,右表可能是空的。 如果它是空的,我想要從左表的所有記錄。 如果它不是空的,那麼我希望左表中沒有出現在右表中的所有記錄。 像這樣: venn diagramMySQL加入不等於空的右表

進一步我需要過濾結果,使其tbl.free = 1

我想這將是一個簡單的任務是這樣的:

SELECT tbl1.id, tbl1.name FROM tbl1 LEFT JOIN tbl2 ON tbl1.id <> tbl2.fk1 WHERE tbl1.free=1 

的結果我得到這是 當tbl2是空的時候,我得到所有tbl1條目,其中free = 1 - 這是好的 當tbl2中有條目時,我得到了tbl1中的所有條目 - 與上面完全一樣(不好)

我該怎麼做才能做這個操作?

+0

請張貼您的表格結構。 –

回答

0

這是一場炒作,但你可能需要一個條件添加到WHERE條款,檢查從第二表中的列是NULL,這表明在第一個表中特定記錄沒有匹配:

SELECT tbl1.id, tbl1.name 
FROM tbl1 
LEFT JOIN tbl2 
    ON tbl1.id = tbl2.fk1 
WHERE tbl1.free = 1 AND tbl2.fk1 IS NULL 
+0

這就像一個魅力,我沒有嘗試過=號。 – ugilten

0

我剛開始誤讀了您的請求。所有你真正想要的是tbl1中的所有記錄在tbl2中都不匹配。無需加入。簡單地說是NOT EXISTSNOT IN條款。

SELECT id, name 
FROM tbl1 
WHERE id IS NOT IN (SELECT fk1 FROM tbl2);