mysql子查询不保持顺序为啥?
Posted
技术标签:
【中文标题】mysql子查询不保持顺序为啥?【英文标题】:mysql subquery does not keep the order WHY?mysql子查询不保持顺序为什么? 【发布时间】:2018-08-01 00:48:59 【问题描述】:大家早上好,我有一张名为“soccer_team”的桌子
id first_name surname player_number
1 Alexis Sanchez 7
2 Petr Cech 33
3 Hector Bellerin 24
4 Olivier Giroud 12
5 Theo Walcott 14
6 Santi Cazorla 19
如果我启动这个命令,
SELECT CONCAT(first_name,' ',surname,' #',player_number) as 'i' from soccer_team order by player_number
它给了我
i
Alexis Sanchez #7
Olivier Giroud #12
Theo Walcott #14
Santi Cazorla #19
Hector Bellerin #24
Petr Cech #33
这是正确的
但是当我跑步时
SELECT GROUP_CONCAT(i,' ') as 'players'
FROM (SELECT CONCAT(first_name,' ',surname,' #',player_number) as 'i'
from soccer_team
order by player_number
) as a;
它给了我
players
Alexis Sanchez #7 ;Petr Cech #33 ;Hector Bellerin #24 ;Olivier Giroud #12 ;Theo Walcott #14 ;Santi Cazorla #19
应该是的
players
Alexis Sanchez #7; Olivier Giroud #12; Theo Walcott #14; Santi Cazorla #19; Hector Bellerin #24; Petr Cech #33
**
如何解决我知道的问题,我想知道为什么会发生这种情况
**
更新
我知道如何解决它,我感兴趣的是因为它适用于这个 方式
【问题讨论】:
GROUP_CONCAT ORDER BY的可能重复 【参考方案1】:您可以在GROUP_CONCAT
中指定顺序,前提是您在子查询中包含player_number
。
SELECT GROUP_CONCAT(i ORDER BY player_number ASC SEPARATOR ' ') as 'players'
FROM (
SELECT CONCAT(first_name,' ',surname,' #',player_number) as 'i' ,player_number
from soccer_team
) as a;
这是Demo。
实际上,您可以通过删除子查询来简化它仍然会给您相同的结果
SELECT GROUP_CONCAT(CONCAT(first_name,' ',surname,' #',player_number)
ORDER BY player_number ASC SEPARATOR ' ') as 'players'
FROM soccerteam
这是Demo。
【讨论】:
。 .CONCAT()
在第二个查询中是多余的。 GROUP_CONCAT()
接受多个参数。
我知道如何解决它,我感兴趣的是因为它是这样工作的
@GianfrancescoAurecchia 这是因为外部查询告诉 mysql 使用指定列对值进行排序。以上是关于mysql子查询不保持顺序为啥?的主要内容,如果未能解决你的问题,请参考以下文章
MySQL - SELECT WHERE field IN(子查询) - 为啥非常慢?