2014-05-21 224 views
0

我無法弄清楚爲什麼會發生這種情況。下面的MySQL查詢返回了我49行,但「總」,在每個排在下面的代碼運行時顯示爲48.MySQL SELECT DISTINCT返回不同的結果

SELECT DISTINCT t2.CIN, t1.Name, 
    (SELECT COUNT(DISTINCT CIN) FROM `cSignatoryAssociations` WHERE DIN ='00016902') As Total 
FROM `cSignatoryAssociations` t2 
LEFT JOIN `cRoC` t1 ON t1.CIN = t2.CIN 
WHERE t2.DIN='00016902' 
ORDER BY SUBSTRING(t1.CIN,9,4) DESC; 

分開我得到預期的結果,即49

SELECT COUNT(DISTINCT CIN) FROM `cSignatoryAssociations` WHERE DIN ='00016902' 

請幫我指點迷津出了什麼問題。

+1

'DISTINCT t2.CIN,t1.Name'與'DISTINCT t2.CIN'有所不同 –

+0

是的,因爲對於每一行,您都會一次又一次地計算相同的事物。 –

回答

1

就像你說的

SELECT COUNT(DISTINCT CIN) FROM `cSignatoryAssociations` WHERE DIN ='00016902' 

返回49行。但這是一個子選擇,主選擇也有一個獨特。

主要選擇與不同將刪除相同的行,這將是這種情況。

整體選擇將返回49行,但有2個相同的元組,Distinct將刪除一個。所以結果將是48行。

+0

謝謝你解釋它。你也可以爲它提出一些解決方案嗎? – geekashu

+0

就像某人已經說過的那樣,子選擇將始終返回相同的值。所以它意味着在主要選擇2個元組是相等的。你不能使用不同但這不會解決你的問題 – Baalthasarr

1

試一下:

SELECT t2.CIN, t1.Name, COUNT(t2.CIN) 
FROM `cSignatoryAssociations` t2 
LEFT JOIN `cRoC` t1 ON t1.CIN = t2.CIN 
WHERE t2.DIN='00016902' 
GROUP BY t1.Name 
ORDER BY SUBSTRING(t1.CIN,9,4) DESC; 

有一件事我不知道你想要做什麼,但只是確保你想LEFT JOININNER JOIN。因爲他們不會給出相同的結果。

+0

這沒有奏效。 COUNT(t2.CIN)將始終爲1,因此所有49條記錄都是CIN獨有的。 – geekashu

+0

然後將該組更改爲「GROUP BY t1.Name」或其他您希望區分的其他列。 –