当你有两个表,并且想要从第二个表中排除行时,有很多选项,包括EXISTS,NOT IN,LEFT JOIN和EXCEPT。
我一直使用左连接:
select N.ProductID from NewProducts N
left join Products P on P.ProductID = N.ProductID
where P.ProductID is null
现在我认为使用EXCEPT更简洁:
select ProductID from NewProducts
except
select ProductID from Products
是否存在使用EXCEPT的性能问题?
答案 0 :(得分:1)
您可以检查执行计划和SQL事件探查器以选择合适的查询。
但是,对我来说,不是EXISTS是好的。 Reference here
答案 1 :(得分:0)
您的问题的答案完全取决于您,具体取决于数据的大小。
根据您的要求,您可以使用其中任何一种(EXISTS, NOT IN, LEFT JOIN and EXCEPT.
)。
你说你总是使用LEFT JOIN
,这很好..因为加入这两个表会最大限度地缩短查询的执行时间,特别是当你持有大量数据时。
JOIN
是可取的,但它总是取决于你。
您可以使用sql的执行计划来查看执行时间的差异。