【发布时间】:2012-01-19 19:42:33
【问题描述】:
我正在尝试显示另一个表中尚不存在的项目列表。例如:
usertable:
uid
name
email
othertable:
uid
我试图过滤掉另一个表中已经存在的用户,所以当我显示用户表时,它只会显示不在另一个表中的用户。
【问题讨论】:
标签: mysql
我正在尝试显示另一个表中尚不存在的项目列表。例如:
usertable:
uid
name
email
othertable:
uid
我试图过滤掉另一个表中已经存在的用户,所以当我显示用户表时,它只会显示不在另一个表中的用户。
【问题讨论】:
标签: mysql
在 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)
【讨论】:
NOT EXISTS 是一种非常有效的方法。
... IN ... 过滤器的结果
NOT EXISTS 只适用于CREATE TABLE 之类的......
IF NOT EXISTS。看看这里你可以用WHERE (NOT) EXISTS做什么:dev.mysql.com/doc/refman/5.0/en/…
使用 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
)
【讨论】: