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'
请帮我指点迷津出了什么问题。
就像你说的
SELECT COUNT(DISTINCT CIN) FROM `cSignatoryAssociations` WHERE DIN ='00016902'
返回49行。但这是一个子选择,主选择也有一个独特。
主要选择与不同将删除相同的行,这将是这种情况。
整体选择将返回49行,但有2个相同的元组,Distinct将删除一个。所以结果将是48行。
谢谢你解释它。你也可以为它提出一些解决方案吗? – geekashu
就像某人已经说过的那样,子选择将始终返回相同的值。所以它意味着在主要选择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 JOIN
或INNER JOIN
。因为他们不会给出相同的结果。
这没有奏效。 COUNT(t2.CIN)将始终为1,因此所有49条记录都是CIN独有的。 – geekashu
然后将该组更改为“GROUP BY t1.Name”或其他您希望区分的其他列。 –
'DISTINCT t2.CIN,t1.Name'与'DISTINCT t2.CIN'有所不同 –
是的,因为对于每一行,您都会一次又一次地计算相同的事物。 –