在 SQLite 中,多个列的排序方式是不是与 group_concat 相同?
Posted
技术标签:
【中文标题】在 SQLite 中,多个列的排序方式是不是与 group_concat 相同?【英文标题】:In SQLite, will multiple colums order the same way with group_concat?在 SQLite 中,多个列的排序方式是否与 group_concat 相同? 【发布时间】:2017-11-26 16:10:06 【问题描述】:我有一张这样的桌子:
title id name
manager.....1......bob
manager.....2......tim
manager.....3.....suzy
worker.....4.....john
我正在查询:select title, group_concat(id), group_concat(name) group by title
我得到了结果:
manager......1,2,3......bob,tim,suzy <-- id order and name order match
worker..........4..............john
我的问题是,id 顺序和 name 顺序是否保证匹配? SQLite manual 说:“连接元素的顺序是任意的。”这是否意味着我冒着得到以下结果的风险:
manager......3,1,2......bob,tim,suzy <-- id order doesn't match name order
worker..........4..............john
我在测试中从未见过这种情况,但在投入生产之前我需要确定。
谢谢!
编辑:澄清一下,我根本不关心 特定 顺序。我只关心group_concat(id)
的顺序与group_concat(name)
的顺序相同。这是我的问题。
【问题讨论】:
Sqlite group_concat ordering的可能重复 【参考方案1】:“任意”一词的意思是“任意”。
无论如何,group_concat()
将按照读取实际行的顺序累积值。所以如果你关心返回值,你应该在聚合之前对原始数据进行排序:
SELECT title, group_concat(id), group_concat(name)
FROM (SELECT title, id, name
FROM ...
ORDER BY title, id -- or whatever order you want
)
GROUP BY title;
理论上,SQLite 的未来版本可能会通过从索引中读取值或类似的方式来优化单个 group_concat()
调用。但因为这确实会改变行为,所以不太可能。在任何情况下,同一个 SQLite 版本的行为都不会改变。
【讨论】:
感谢您的回答。澄清一下,我根本不关心具体的顺序,我只关心group_concat(id)
的顺序与group_concat(name)
的顺序相同。在您的示例中,子查询是否仅适用于group_concat(name)
而不适用于group_concat(id)
?是否保证id
的行顺序与name
的行顺序相同?以上是关于在 SQLite 中,多个列的排序方式是不是与 group_concat 相同?的主要内容,如果未能解决你的问题,请参考以下文章