我有下表:
greeting: +-------------------------+ | id | lang_id | name | +-------------------------+ | 1 | 1 | 'Hello!' | | 1 | 2 | '¡Hola!' | | 1 | 3 | 'Salut!' | +----+---------+----------+
我需要从中创建一个.CSV文件以供后续处理:
greeting.csv: --------------------- id;en;es;fr 1;Hello!;¡Hola!;Salut! ---------------------
我可以使用GROUP_CONCAT
选择所有语言:
SELECT
id,
GROUP_CONCAT(name SEPARATOR ';') as 'name'
FROM
greeting
WHERE
greeting.id = 1;
它产生结果:
id | name ---+-------------------- 1 | Hello!;¡Hola!;Salut!
但是,它需要在代码中对'name'列进行特殊处理,因为我必须先对连接的字符串进行标记,然后才能继续。
我想知道是否有办法得到这样的结果:
id | en | es | fr ---+--------+--------+------- 1 | Hello! | ¡Hola! | Salut!
所以我可以统一处理列。
感谢。
答案 0 :(得分:3)
SELECT
id,
MAX(CASE WHEN lang_id=1 THEN name END) eng,
MAX(CASE WHEN lang_id=2 THEN name END) es,
MAX(CASE WHEN lang_id=3 THEN name END) fr
FROM
yourtable
GROUP BY
id
答案 1 :(得分:3)
你想要一个pivot,它在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
您可以不使用最终条件t1.id = 1
来获取所有问候语。