我有另一位程序员编写了一堆删除语句,看起来像这样:
DELETE dbo.Test WHERE TestId IN (SELECT TestId FROM #Tests )
这个很简单,但是有些语句中会有子查询和子子查询。
我总是把这些语句写成join。我觉得这就像是一个内联函数,会被反复调用。
然而,我知道优化器能够做出一些非常神奇的事情,而且新的东西也在不断添加。我已经有一段时间没有研究过Join与In之间的区别了,我想问一下现在是否仍然应该使用Join。
使用"join"还是"in"有影响吗?
in
不是用来这样使用的,那么它应该如何使用?我看不出那种用法有什么问题 - 一些 DBMS 甚至不支持在delete
语句中使用连接,你就没有其他选择了,而且它们的性能也很好。并且:连接不一定是 IN 条件的替代品,两者具有不同的目的,可能会返回不同的结果。 - user330315IN
通常用于与列值进行比较的有限值列表。一般来说,除非您实际上有一个有限的列表要查找,否则最好使用EXISTS
子句或JOIN
而不是IN
。总的来说,这将产生更一致的结果。 - Jeremy Holovacs