题
我想我会沿着正确的路径与此一......请原谅我的SQL是不是最大的。
我想查询数据库选择了从一个表,其中某些细胞不存在其他。那么多不使一个很大的意义,但我希望这一段代码将
SELECT * from employees WHERE NOT EXISTS (SELECT name FROM eotm_dyn)
所以基本上我有员工及其细节的列表中的一个表。然后用其他一些细节,包括姓名另一个表。哪里有名字并不在eotm_dyn表,意思是有没有为他们进入,我想看看他们究竟是谁,或者换句话说,看看到底缺什么。
上面的查询返回什么,但我知道有20ish名失踪所以我显然没有得到它的权利。
谁能帮助?
解决方案
您没有加入表中查询。
您最初的查询将总是返回什么,除非有没有记录在所有eotm_dyn
,在这种情况下,它会返回一切。
假设这些表应该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)
OR
SELECT * FROM employees WHERE NOT EXISTS (SELECT * FROM eotm_dyn WHERE eotm_dyn.name = employees.name)
OR
SELECT * FROM employees LEFT OUTER JOIN eotm_dyn ON eotm_dyn.name = employees.name WHERE eotm_dyn IS NULL
可以做左连接并且置联接的列是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
是空,则返回的任何记录。你需要某种对SELECT name FROM eotm_dyn
标准像
SELECT * from employees
WHERE NOT EXISTS (
SELECT name FROM eotm_dyn WHERE eotm_dyn.employeeid = employees.employeeid
)
假设两个表由一个外键关系链接。在这一点上,你可以使用各种其他选项包括LEFT JOIN。优化器将典型地处理它们在大多数情况下是相同的,但是
您还可以看看此相关的问题。该用户报告说,使用比使用子查询联接提供更好的性能。
不隶属于 StackOverflow