0

假设我有下表:

ID|Col1    |Col2
1 |Test1   |Test12
2 |Test2   |Test22
2 |Test3   |Test32

当我使用如下查询时:

SELECT GROUP_CONCAT(Col1) as First, GROUP_CONCAT(Col2) as Second WHERE ID=2 GROUP BY ID

它有时会返回重新排列的 GROUP_CONCAT。例如:

ID|First      |Second
2 |Test2,Test3|Test32,Test22

虽然我希望它会返回:

ID|First      |Second
2 |Test2,Test3|Test22,Test32

如您所见,它切换了名为“Second”的列中的连接值。我怎样才能防止这种情况发生?

4

2 回答 2

1

此表缺少在 group_concat 中排序的公共列 (PK)。

ID|组ID|Col1 |Col2

1|1 |测试1 |测试12

2|2 |测试2 |测试22

3|2 |测试3 |测试32

SELECT GROUP_CONCAT(Col1 ORDER BY ID) as First,
       GROUP_CONCAT(Col2 ORDER BY ID) as Second
FROM t
WHERE GroupID = 2
GROUP BY GroupID;

这将保留 col1 和 col2 的组连接顺序。

于 2017-03-31T12:13:09.693 回答
1

如果您希望值按特定顺序排列,请使用order by

SELECT GROUP_CONCAT(Col1 ORDER BY Col1) as First,
       GROUP_CONCAT(Col2 ORDER BY col2) as Second
FROM t
WHERE ID = 2
GROUP BY ID;

通常,SQL 处理无序集。如果您希望按特定顺序进行操作,则需要明确指定顺序。

于 2017-03-31T11:59:51.813 回答