如何在没有GROUP_CONCAT的情况下将行转换为列?

Ale*_*man 1 mysql sql

我有下表:

问候:
+ ------------------------- +
| id | lang_id | 名称|
+ ------------------------- +
| 1 | 1 | '你好!' |
| 1 | 2 | '你好!' |
| 1 | 3 | “萨鲁特!” |
+ ---- + --------- + ---------- +

我需要从中创建一个.CSV文件以进行后续处理:

greeting.csv:
---------------------
id; en; es; fr
1;你好!;¡Hola!; Salut!
---------------------

我可以使用GROUP_CONCAT以下命令将所有语言连续选择:

SELECT
    id,
    GROUP_CONCAT(name SEPARATOR ';') as 'name'
FROM
    greeting
WHERE
    greeting.id = 1;
Run Code Online (Sandbox Code Playgroud)

它产生结果:

id | 名称
--- + --------------------
 1 | 您好!;¡Hola!; Salut!

但是,它需要对代码中的“名称”列进行特殊处理,因为在继续之前,我必须对连接的字符串进行标记化。

我想知道是否有办法得到这样的结果:

id | zh | es | fr
--- + -------- + -------- + -------
 1 | 你好!| 你好!| 敬礼!

因此,我可以以统一的方式处理列。

谢谢。

Boh*_*ian 5

您需要一个数据透视表,它在mysql中本身不受支持,但是很容易编写代码:

SELECT
  t1.id,
  t1.name en,
  t2.name es,
  t3.name fr
FROM greeting t1
JOIN greeting t2 ON t1.id = t2.id AND t2.lang_id = 2
JOIN greeting t2 ON t1.id = t3.id AND t3.lang_id = 3
WHERE t1.lang_id = 1
AND t1.id = 1
Run Code Online (Sandbox Code Playgroud)

您可以放弃最终条件t1.id = 1以获得所有问候。