我有下表:
问候: + ------------------------- + | 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 | 你好!| 你好!| 敬礼!
因此,我可以以统一的方式处理列。
谢谢。
您需要一个数据透视表,它在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以获得所有问候。