交点计数返回意外值

时间:2013-03-21 00:23:33

标签: sql sql-server tsql count

我必须使用表格,比如说A和B以及不可为空的的公共列X.

查询1:

SELECT COUNT(*)
FROM A
WHERE A.X in                       
(SELECT distinct(B.X) FROM B)

查询2:

SELECT COUNT(*)
FROM B
WHERE B.X in
(SELECT distinct(X) FROM A)

查询3:

SELECT COUNT(*)
FROM A, B
WHERE A.X=B.X

查询1结果5990.查询2和3结果6222.删除distinct或检查顶部的非重复计数不会更改结果。有人可以解释为什么所有查询的结果都不一样,因为它们都会返回交集计数吗?

1 个答案:

答案 0 :(得分:1)

假设A有值 一个 乙 ç

假设B有值 一个 乙 C d Ë ç

在这种情况下,A的计数为3(QRY1) 由于c重复,因此B的计数为4(QRY2) 当你使用连接C将匹配时,C的所有值都有比A更多的重复.A可能有重复,但更少。 4再次(QRY3)