Sql 两个查询之间的差异-加入与加入
我有以下两个问题。Query1返回1000作为行计数,而as Query2返回4000作为行计数。有人能解释一下这两个问题之间的区别吗。我希望两个都能返回相同的计数 查询1:Sql 两个查询之间的差异-加入与加入,sql,Sql,我有以下两个问题。Query1返回1000作为行计数,而as 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 ) SELECT COUNT
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
)
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
查询2:
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
)
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
在许多情况下,他们会返回相同的答案,但不一定。第一种方法统计数据集中与条件匹配的行数——不管匹配的数目如何,每行只统计一次。第二个执行一个
连接
,它可以将行数相乘
如果第二个查询使用count(distinct A.id)
,其中id
是唯一的或主键,那么它的结果将是等价的
也就是说,尽管它们在功能上相似,但它们的执行方式可能会有很大的不同。不同的SQL引擎可能会更好地优化一个版本或另一个版本
顺便说一下,您应该避免使用过时的
join
语法。自1992年以来,显式联接一直是SQL语法的一部分。对于a,可能会返回多行。我们完全同意古老的联接语法。我几乎以为你有一些交叉积在进行,在这种情况下,第二个查询会比第一个查询大大膨胀。