JOIN的反向效果

时间:2012-10-30 16:27:18

标签: php mysql

我有两张桌子:

  • 人员名单;
  • 我想忽略的人员名单。

当我阅读人员列表时,我不希望看到列表中被忽略的人。

我目前的解决方案是第二次查询数据库(选择我想忽略的人)并从我用PHP创建的数组中删除它们。它工作正常。

但是,我想在MySQL中这样做。我知道JOIN只有在另一个表中存在该行时才会加入。我正在寻找不同的东西(如果行存在,则不会显示条目)。

我在谷歌搜索过但缺少“关键字”却没有给我带来任何结果。

由于

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

在不了解您的架构的情况下,我会提出以下建议:

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

答案 2 :(得分:2)

你可以试试这样的事情

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

here's关于MySql中EXISTS的链接