我有以下两个问题。 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
答案 0 :(得分:1)
在许多情况下,他们会返回相同的答案,但不一定。第一个计算A中与条件匹配的行数 - 每行只计算一次,而不管匹配的数量。第二个执行join
,它可以乘以行数。
如果第二个查询使用count(distinct A.id)
,其中id
是唯一的或主键,则第二个查询在结果中会相同。
尽管如此,虽然它们在功能上相似,但它们的执行方式可能完全不同。不同的SQL引擎可能会更好地优化一个版本或另一个版本。
顺便说一句,你应该避免使用古老的join
语法。自1992年以来,显式连接已成为SQL语法的一部分。