select*不存在
我想我正在走这个正确的道路…请忍受我,因为我的SQL不是最伟大的
我试图查询一个数据库来select一个表中的某些特定单元格不存在于另一个表中。 这不是很有道理,但我希望这段代码会
SELECT * from employees WHERE NOT EXISTS (SELECT name FROM eotm_dyn)
所以基本上我有一张表,列出雇员名单和他们的详细信息。 然后是另外一张桌子和其他一些细节,包括他们的名字 如果名称不在eotm_dyn表中,意味着没有条目,我想确切地看他们是谁,换句话说,看看究竟是什么东西丢失。
上面的查询什么也没有返回,但是我知道有20个名字不见了,所以我显然没有得到正确的答案。
谁能帮忙?
您没有在查询中join表格。
您的原始查询将永远不会返回,除非eotm_dyn
中没有任何logging,在这种情况下,它将返回所有内容。
假设这些表应该join到employeeID
,请使用以下命令:
SELECT * FROM employees e WHERE NOT EXISTS ( SELECT null FROM eotm_dyn d WHERE d.employeeID = e.id )
你可以用一个LEFT JOIN
关键字连接这些表,并过滤掉NULL
,但这可能比使用NOT EXISTS
效率低。
SELECT * FROM employees WHERE name NOT IN (SELECT name FROM eotm_dyn)
要么
SELECT * FROM employees WHERE NOT EXISTS (SELECT * FROM eotm_dyn WHERE eotm_dyn.name = employees.name)
要么
SELECT * FROM employees LEFT OUTER JOIN eotm_dyn ON eotm_dyn.name = employees.name WHERE eotm_dyn IS NULL
你可以做一个LEFT JOIN,并且声明连接的列是NULL。
例:
SELECT * FROM employees a LEFT JOIN eotm_dyn b on (a.joinfield=b.joinfield) WHERE b.name IS NULL
SELECT * from employees WHERE NOT EXISTS (SELECT name FROM eotm_dyn)
除非eotm_dyn
为空,否则不要返回任何logging。 你需要在SELECT name FROM eotm_dyn
类的条件
SELECT * from employees WHERE NOT EXISTS ( SELECT name FROM eotm_dyn WHERE eotm_dyn.employeeid = employees.employeeid )
假设这两个表是通过外键关系链接的。 此时,您可以使用其他各种选项,包括LEFT JOIN。 但是,在大多数情况下,优化器通常会处理它们。
你也可以看看这个相关的问题 。 该用户报告说,使用连接提供比使用子查询更好的性能。