MySQL SELECT DISTINCT返回不同的结果

问题描述:

我无法弄清楚为什么会发生这种情况。下面的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

是的,因为对于每一行,您都会一次又一次地计算相同的事物。 –

就像你说的

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

返回49行。但这是一个子选择,主选择也有一个独特。

主要选择与不同将删除相同的行,这将是这种情况。

整体选择将返回49行,但有2个相同的元组,Distinct将删除一个。所以结果将是48行。

+0

谢谢你解释它。你也可以为它提出一些解决方案吗? – geekashu

+0

就像某人已经说过的那样,子选择将始终返回相同的值。所以它意味着在主要选择2个元组是相等的。你不能使用不同但这不会解决你的问题 – Baalthasarr

试一下:

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”或其他您希望区分的其他列。 –