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。 但是,在大多数情况下,优化器通常会处理它们。

你也可以看看这个相关的问题 。 该用户报告说,使用连接提供比使用子查询更好的性能。