【问题标题】:Why are duplicate results returned even when distinct keyword is used?为什么即使使用 distinct 关键字也会返回重复的结果?
【发布时间】:2019-03-04 20:12:04
【问题描述】:

当我运行以下查询时,我返回了两个具有重复结果的条目。为什么我在这里使用 distinct 时返回重复的结果?主键是门牌号、街道名称和单元号。

SELECT distinct
  house_num,
  Street_name,
  Unit_Designator,
  Unit_Num
FROM voterinfo.voter_info
WHERE house_num = 420 
  AND street_name = "PARK"
  AND Unit_Num = '' 
  AND Unit_Designator = '';

【问题讨论】:

  • 验证空格是否也相同(可能某处的额外空格会使地址不同)。
  • 没有样本输入和输出,您认为我们可以如何帮助您?

标签: mysql sql distinct


【解决方案1】:

select distinct 是确保结果集没有重复 的语句。也就是说,它会过滤掉每一列都相同的行(并且NULL 的值被认为是相等的)。

它不查看列的子集。

有时,人们使用select distinct 却没有意识到它适用于所有列。当第一列在括号中时,这相当有趣——好像括号有区别(它们没有)。

然后,您可能还会遇到值看起来相同但不同的情况。

考虑这个简单的例子,其中值仅以空格作为字符串的结尾:

select distinct x
from (select 'a' as x union all
      select 'a '
     ) y;

Here 是一个数据库在这个例子中摆弄。

这会返回两行,而不是 1。

没有样本数据,很难说您指的是哪种情况。但是您认为“相同”的行确实​​不是。

【讨论】:

  • MySQL 是否关心此处的尾随空格?
  • " 当第一列在括号中时,这很有趣——好像括号有区别(它没有)。好吧,在 MySQL 中至少 PostgreSQL 确实或多或少地支持它 DISTINCT ON (column [, column ..]), column [, column ...] 但你可以在 MySQL 中 simulate
  • @RaymondNijland 。 . . DISTINCT ON不是 SELECT DISTINCT。 Postgres(当然)支持SELECT DISTINCT,其行为与描述的一样。
  • 是的,你在哪里读到我说 PostgreSQL 中的 SELECT DISTINCT 处理不同于 MySQL SELECT DISTINCT 的地方?我在谈论 PostgreSQL 的 SELECT DISTINCT ON(columns),* 语法,topicstarter 在这里可能或多或少需要它并且需要模拟但如果没有示例数据和预期结果很难说。当我说PostgreSQL在使用带括号的DISTINCT时或多或少地支持这一点时,也许我解释错了?
【解决方案2】:

对于数据类型为 Char 或类似 (Street_name,Unit_Designator) 的字段,可能存在在查询编辑器中不可见的空格,这些空格将通过应用适当的修剪逻辑来删除。请参阅下面的链接,

MySQL select fields containing leading or trailing whitespace

【讨论】:

    猜你喜欢
    • 2012-11-12
    • 2015-04-12
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 2023-01-19
    • 2021-07-31
    • 2016-08-27
    相关资源
    最近更新 更多