MySQL多重查询>;将行存储到列中

MySQL多重查询>;将行存储到列中,mysql,pivot,left-join,Mysql,Pivot,Left Join,我需要创建一个SQL查询,其中列出了下表。语言列表中的行作为列名。谢谢 图片表和查询: 如果事先知道语言 SELECT r.id, r.parent, MAX(CASE WHEN n.language_id = 1 THEN n.name END) cs, MAX(CASE WHEN n.language_id = 2 THEN n.name END) en FROM cat_route r LEFT JOIN cat_route_name n ON r.

我需要创建一个SQL查询,其中列出了下表。语言列表中的行作为列名。谢谢

图片表和查询:


如果事先知道语言

SELECT r.id, r.parent,
       MAX(CASE WHEN n.language_id = 1 THEN n.name END) cs,
       MAX(CASE WHEN n.language_id = 2 THEN n.name END) en
  FROM cat_route r LEFT JOIN cat_route_name n
    ON r.id = n.cat_route_id
 GROUP BY r.id
这里是演示


如果您希望它是动态的,这取决于您在
language

SET @sql = NULL;

SELECT GROUP_CONCAT(CONCAT(
  'MAX(CASE WHEN n.language_id = ', id, ' THEN n.name END) `', short, '`'))
  INTO @sql
  FROM language;

SET @sql = CONCAT(
  'SELECT r.id, r.parent, ', @sql, '
     FROM cat_route r LEFT JOIN cat_route_name n
       ON r.id = n.cat_route_id
    GROUP BY r.id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

这里是演示

请分享您的尝试。这将有助于找到解决方案…这称为支点。关于这个话题,以前有成百上千的问题。请搜索它们。