2012-10-30 32 views
1

我有兩個表:反向JOIN的效果

  • 人名單;
  • 我想忽略的人員列表。

當我閱讀人員列表時,我不想看到列表中被忽略的人。

我目前的解決方案是第二次查詢數據庫(選擇我想忽略的人),並從我用PHP創建的數組中刪除它們。它工作,沒關係。

但是,我想在MySQL中這樣做。我知道JOIN只會在該行存在於另一個表中時纔會連接。我正在尋找不同的東西(如果行存在,將不會顯示條目)。

我在谷歌搜索,但缺乏「關鍵字」這給了我沒有結果。

感謝

+0

這是你的數據庫結構?如果沒有任何源代碼,我們不能幫你 –

回答

6
SELECT * FROM Person 
LEFT OUTER JOIN IgnoredPerson 
ON Person.id = IgnoredPerson.id 
WHERE IgnoredPerson.id IS null 

說明:

enter image description here

通過where子句排除我們不從右側所需的記錄

http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

+0

是否需要'OUTER'部分?這不僅僅是一個'LEFT JOIN'嗎? –

+0

@RocketHazmat [''LEFT OUTER JOIN === LEFT JOIN'](http://stackoverflow.com/questions/2809594/basic-question-left-outer-join-vs-left-join),但我喜歡明確。 –

+0

謝謝你。您的解決方案完美運作 –

1

不知道您的架構,我建議沿着這些路線的東西:

SELECT * FROM people WHERE id NOT IN (SELECT person_id FROM ignored_people) 
1

你可以嘗試這樣的

SELECT * FROM people p WHERE NOT EXISTS (SELECT i.id FROM ignorePeople i where p.id = i.id) 

here's鏈接一些關於在MySQL

EXISTS