两个查询之间的差异 - 加入与IN

时间:2014-11-15 02:59:31

标签: sql

我有以下两个问题。 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
)

QUERY2:

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

1 个答案:

答案 0 :(得分:1)

在许多情况下,他们会返回相同的答案,但不一定。第一个计算A中与条件匹配的行数 - 每行只计算一次,而不管匹配的数量。第二个执行join,它可以乘以行数。

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

尽管如此,虽然它们在功能上相似,但它们的执行方式可能完全不同。不同的SQL引擎可能会更好地优化一个版本或另一个版本。

顺便说一句,你应该避免使用古老的join语法。自1992年以来,显式连接已成为SQL语法的一部分。