SQL:如何使用DISTINCT保持行顺序?
以下SQL查询:
SELECT messages.id, messages.created_at, comments.created_at FROM messagesLEFT JOIN comments ON comments.message_id = messages.id
WHERE (messages.id IN (429,443))
ORDER BY GREATEST(messages.created_at, comments.created_at) DESC
返回:
id messages.created_at comments.created_at--------------------------------------------------------
443 2 5
429 1 4
443 2 3
(I replaced dates with numbers for readability)
要id
添加一次,只需添加一次即可DISTINCT
:
SELECT DISTINCT messages.id FROM messagesLEFT JOIN comments ON comments.message_id = messages.id
WHERE (messages.id IN (429,443))
ORDER BY GREATEST(messages.created_at, comments.created_at) DESC
但是,结果id
值改变了顺序:
id---
429
443
可能是什么原因呢?
我如何保留订单?
回答:
该distinct
关键字是做什么它应该做的事情,回报每一个行与给定的列值。不同不允许您指定 哪些
这样的行会被退回,这是从原来的查询,这样的排序是允许清楚(存在一个跟随ID为429的行ID为443行)。
要控制将返回哪些行,您需要重新构造查询。我将采用的典型解决方案是使用group by
,从每个组中选择组列和所需的行,以达到以下效果:
SELECT message.id, MAX(message.created_at) FROM message GROUP BY message.id;
如果需要执行更多操作,则将这种查询用作较大查询中的子选择,可能会加入id字段以从首选行中获取更多字段,或者以特定方式对查询进行排序。
以上是 SQL:如何使用DISTINCT保持行顺序? 的全部内容, 来源链接: utcz.com/qa/410632.html