【问题标题】:MySQL SELECT DISTINCT not behaving as expectedMySQL SELECT DISTINCT 未按预期运行
【发布时间】:2012-02-05 21:14:48
【问题描述】:

好吧,这真的让我很困惑。

此查询返回预期结果,尽管 car_id 编号重复

SELECT car_id FROM `Updates` ORDER BY `updates`.`created` DESC

这 2 个查询返回相同的结果集:

SELECT distinct `Updates`.`car_id` FROM `Updates` ORDER BY `updates`.`created` DESC

SELECT car_id FROM `Updates` GROUP BY car_id ORDER BY `updates`.`created` DESC

请参阅下文,了解它们的不同之处:

【问题讨论】:

  • 返回多少行?我猜他们并没有丢失,而是回到了结果集中。请按 id 订购以检查。
  • @stryba 你说得对,似乎其他 id 实际上在列表中,只是不在我指定的副本中 - ORDER BY updates.created DESC 有什么想法吗?

标签: mysql select distinct


【解决方案1】:

我不认为这与您的问题密切相关,但是:

SELECT DISTINCT car_id 
FROM Updates 
ORDER BY created DESC

不是有效的标准 SQL 语法。可能有许多行具有相同的car_id 和不同的created 值。订购时应该使用哪一个?

也许您想重写查询,使其返回有意义的结果:

SELECT car_id 
FROM Updates
GROUP BY car_id 
ORDER BY MAX(created) DESC              --- or MIN(created)
                                        -- whatever suits you

【讨论】:

  • 拯救了我的一天...非常感谢
【解决方案2】:

您通过updates.created 订购。大概这意味着每个不同的carid 都会出现,只是不完全是您期望的位置。尝试按carid 排序以进行比较。

【讨论】:

  • 你说得对,似乎其他 id 实际上在列表中,只是不在我指定的副本中 - ORDER BY updates.created DESC 有什么想法吗?
【解决方案3】:

会有这样的工作:

SELECT * FROM Updates GROUP BY car_id ORDER BY created DESC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-21
    • 2021-06-07
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    相关资源
    最近更新 更多