2013-03-21 60 views
0

我不得不說表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或檢查不同的數字在頂部不會改變結果。有人可以解釋爲什麼結果對於所有查詢都不一樣,因爲它們都返回相交數?

+0

它們在邏輯上並不相同:您的結果意味着AX中存在更多非獨特值:http://www.sqlfiddle.com/#!3/67623/7 – 2013-03-21 00:31:18

+1

將不同於計數(Distinct *)可能工作,如果他們事實上所有的領域重複。 count(distinct X)會導致表中的計數相同,因爲您將消除重複項。 – xQbert 2013-03-21 00:36:04

+0

截然不同(*)不起作用,因爲整行不一樣。它是獨特的(X)是有效的。 – 2013-03-29 12:40:49

回答

1

假設A具有值 甲 乙 Ç

假設B具有值 甲 乙 Ç d Ë Ç

在這種情況下的

將具有3(QRY1計數) 雖然由於c重複(QRY2) 而B將具有4的計數,因此當您使用聯接時C將匹配,則C的所有值都具有比A更多的重複項.A可能具有重複但少於它們。 (QRY3)

+0

我不得不選擇計數(不同的X)。 – 2013-03-21 18:31:18

相關問題