我想我会沿着正确的路径与此一......请原谅我的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。优化器将典型地处理它们在大多数情况下是相同的,但是

您还可以看看此相关的问题。该用户报告说,使用比使用子查询联接提供更好的性能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top