【问题标题】:How do I properly use NOT EXISTS for MySQL?如何正确使用 NOT EXISTS for MySQL?
【发布时间】:2012-01-19 19:42:33
【问题描述】:

我正在尝试显示另一个表中尚不存在的项目列表。例如:

usertable:

uid
name
email

othertable:
uid

我试图过滤掉另一个表中已经存在的用户,所以当我显示用户表时,它只会显示不在另一个表中的用户。

【问题讨论】:

标签: mysql


【解决方案1】:

在 mysql 中不存在与您想要做的完全不同。 更新:这不是真的!(感谢指出)

我知道您想选择所有在 usertable 但不在 othertable 中的记录,对吗?

SELECT * FROM usertable WHERE uid NOT in (SELECT uid FROM othertable)

更新如果您想检查行中的所有字段,而不仅仅是 ID,您可以使用以下内容:

SELECT * FROM usertable
WHERE field1, field2, fieldN NOT IN
(SELECT field1, field2, fieldN FROM othertable)

【讨论】:

  • 没错!谢谢!我还可以在第二个选择中添加 WHERE 子句吗?
  • NOT EXISTS 是一种非常有效的方法。
  • @diesel 当然,第二个查询是一个普通查询,返回一组将用于... IN ... 过滤器的结果
  • @ErwinBrandstetter 该死,我喜欢学习新事物。我一直认为NOT EXISTS 只适用于CREATE TABLE 之类的......
  • 那是IF NOT EXISTS。看看这里你可以用WHERE (NOT) EXISTS做什么:dev.mysql.com/doc/refman/5.0/en/…
【解决方案2】:

使用 LEFT JOIN 会更简单:

SELECT u.*
FROM   usertable u
LEFT   JOIN othertable o USING (uid)
WHERE  o.uid IS NULL

如果你想拥有NOT EXISTS:

SELECT *
FROM   usertable u
WHERE  NOT EXISTS (
    SELECT *
    FROM othertable o
    WHERE o.uid = u.uid
    )

【讨论】:

    猜你喜欢
    • 2015-06-17
    • 2021-12-24
    • 2020-09-03
    • 1970-01-01
    • 2014-06-06
    • 2011-11-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多