【问题标题】:MySQL SELECT DISTINCT returning different resultsMySQL SELECT DISTINCT 返回不同的结果
【发布时间】:2014-07-10 05:39:09
【问题描述】:

我无法弄清楚为什么会发生这种情况。 MySQL Query 之后返回 49 行,但每行中的“Total”显示为 48。

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'

请帮我找出问题所在。

【问题讨论】:

  • DISTINCT t2.CIN, t1.NameDISTINCT t2.CIN 不同
  • 是的,因为每一行你都在一遍又一遍地计算同样的东西。

标签: mysql sql distinct


【解决方案1】:

就像你说的

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

返回 49 行。但这是一个子 Select,主 Select 也有一个 Distinct。

带有 Distinct 的 Main Select 将删除相同的行,情况就是这样。

Whole Select 将返回 49 行,但有 2 个相同的元组,并且 Distinct 将删除一个。所以结果将是 48 行。

【讨论】:

  • 感谢您的解释。你也可以提出一些解决方案吗?
  • 就像有人已经说过的那样,子选择将始终返回相同的值。所以这意味着在主选择中有两个相等的元组。你不能使用 distinct 但这不能解决你的问题
【解决方案2】:

试试看:

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。因为他们没有给出相同的结果。

【讨论】:

  • 这没有用。 COUNT(t2.CIN) 将始终为 1,因为所有 49 条记录都是 CIN 唯一的。
  • 然后将分组更改为GROUP BY t1.Name 或其他您想要区分的列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-08
  • 2016-12-14
  • 1970-01-01
相关资源
最近更新 更多