SELECT *
FROM employees e
WHERE NOT EXISTS
(
SELECT name
FROM eotm_dyn d
WHERE d.employeeID = e.id
)
And
SELECT * FROM employees a LEFT JOIN eotm_dyn b on (a.joinfield=b.joinfield) WHERE b.name IS NULL
哪个效率更高,分析一下?
假设涉及的列值不能为 NULL -
MySQL:
LEFT JOIN/IS NULL
is 更高效 than NOT EXISTS
- read 这篇文章的详细信息 http://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join-is-null-mysql/.
Oracle:
它们是等价的 http://explainextended.com/2009/09/17/not-in-vs-not-exists-vs-left-join-is-null-oracle/.
SQL服务器:
NOT EXISTS
is 更高效 than LEFT JOIN/IS NULL
- 阅读这篇文章了解详细信息 http://explainextended.com/2009/09/15/not-in-vs-not-exists-vs-left-join-is-null-sql-server/.
Postgres:
像甲骨文一样,他们是等价的 http://explainextended.com/2009/09/16/not-in-vs-not-exists-vs-left-join-is-null-postgresql/.
如果您对列值不能为空这一细节有疑问,请使用 LEFT JOIN / IS NULL - 记住 LEFT JOIN 的含义。这个链接 http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html可能有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)