SELECT *
FROM employees e
WHERE NOT EXISTS
(
SELECT name
FROM eotm_dyn d
WHERE d.employeeID = e.id
)
并且
SELECT * FROM employees a LEFT JOIN eotm_dyn b on (a.joinfield=b.joinfield) WHERE b.name IS NULL
哪个更有效,有些分析?
答案 0 :(得分:4)
假设涉及的列值不能为NULL -
LEFT JOIN/IS NULL
效率比NOT EXISTS
更高效 - 阅读this article for details。
NOT EXISTS
比LEFT JOIN/IS NULL
- read this article for details 更高效。
与Oracle一样,they are equivalent。
如果您对列值不能为null的详细信息有疑问,但使用LEFT JOIN / IS NULL - 请记住LEFT JOIN表示的内容。 This link可能有帮助。
答案 1 :(得分:2)
我真的认为你应该描述这样一个问题。它不仅依赖于确切的数据库产品,而且理论上它还可能取决于数据的偏差。
然而!默认情况下,我会说编写最明确表达您意图的代码。您在employee
条记录之后没有匹配的eotm_dyn
,因此IMO 最清晰的代码为WHERE NOT EXISTS
。它可能无关紧要,但我会使用SELECT 1
(而不是SELECT name
),因为name
在“没有匹配的eotm_dyn
逻辑时并不重要。” p>
一旦你有代表表达你想要和工作的代码,那么看看基于分析优化。