从结果集中排除行,LEFT JOIN和EXCEPT

时间:2015-11-09 08:47:28

标签: sql sql-server

当你有两个表,并且想要从第二个表中排除行时,有很多选项,包括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的性能问题?

2 个答案:

答案 0 :(得分:1)

您可以检查执行计划和SQL事件探查器以选择合适的查询。

但是,对我来说,不是EXISTS是好的。 Reference here

答案 1 :(得分:0)

您的问题的答案完全取决于您,具体取决于数据的大小。

根据您的要求,您可以使用其中任何一种(EXISTS, NOT IN, LEFT JOIN and EXCEPT.)。

你说你总是使用LEFT JOIN,这很好..因为加入这两个表会最大限度地缩短查询的执行时间,特别是当你持有大量数据时。

JOIN是可取的,但它总是取决于你。

您可以使用sql的执行计划来查看执行时间的差异。