【问题标题】: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

**

如何解决我知道的问题,我想知道为什么会发生这种情况

**

更新

我知道如何解决它,我感兴趣的是因为它适用于这个 方式

【问题讨论】:

标签: mysql sql


【解决方案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 使用指定列对值进行排序。
猜你喜欢
  • 1970-01-01
  • 2013-09-12
  • 1970-01-01
  • 2021-04-14
  • 2014-07-30
  • 2015-11-16
  • 2014-05-29
  • 1970-01-01
  • 2011-01-16
相关资源
最近更新 更多