【问题标题】:Difference between Two Queries - Join vs IN两个查询之间的区别 - 加入与 IN
【发布时间】:2014-11-15 02:59:30
【问题描述】:

我有以下两个疑问。 Query1 返回 1000 作为行数,而 Query2 返回 4000 作为行数。有人可以解释这两个查询之间的区别。我希望两者都能返回相同的计数。

查询1:

SELECT COUNT(*) 
FROM TableA A 
WHERE A.VIN IN (
    SELECT VIN 
    FROM TableB B, TableC C
    WHERE B.MODEL_YEAR = '2014' AND B.VIN_NBR = C.VIN
)

查询2:

SELECT COUNT(*) 
FROM TABLEA A, TableB B, TableC C
WHERE B.MODEL_YEAR = '2014' AND B.VIN_NBR = C.VIN AND A.VIN = C.VIN

【问题讨论】:

  • 一个可能会为 a.vin 返回多行

标签: sql


【解决方案1】:

在许多情况下,它们会返回相同的答案,但不一定。第一个计算 A 中与条件匹配的行数 - 每行仅计算一次,无论匹配数如何。第二个做了一个join,可以成倍增加行数。

如果第二个查询使用count(distinct A.id),则其结果将是等效的,其中id 是唯一的或主键。

也就是说,尽管它们在功能上相似,但它们的执行方式却大不相同。不同的 SQL 引擎可能会更好地优化一个版本或另一个。

顺便说一句,您应该避免使用过时的join 语法。自 1992 年以来,显式联接已成为 SQL 语法的一部分。

【讨论】:

  • 绝对同意古老的连接语法。我差点以为你有一些交叉产品,在这种情况下,第二个查询与第一个查询相比会大大膨胀。
猜你喜欢
  • 1970-01-01
  • 2012-12-13
  • 2014-06-02
  • 2015-08-17
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 2017-01-30
相关资源
最近更新 更多