Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL concaténant toutes les colonnes

Pour concaténer toutes les colonnes d'une table, vous ne pouvez pas utiliser le * mot-clé, mais vous devez lister explicitement toutes les colonnes :

SELECT CONCAT(col1, col2, col3, ....)
FROM yourtable

ou vous pouvez utiliser CONCAT_WS qui ignorera les valeurs nulles :

SELECT CONCAT_WS(',', col1, col2, col3, ....)
FROM yourtable

Si vous ne souhaitez pas spécifier manuellement tous les noms de colonne, vous pouvez utiliser une requête dynamique. Cette requête renverra tous les noms de colonne de votre table :

SELECT `column_name` 
FROM   `information_schema`.`columns` 
WHERE  `table_schema`=DATABASE() 
       AND `table_name`='yourtable';

et en utilisant GROUP_CONCAT vous pouvez obtenir une liste de tous les noms de colonnes :

GROUP_CONCAT(CONCAT('`', column_name, '`'))

entre guillemets, dans un format séparé par des virgules :

`col1`,`col2`,`col3`,`col4`,...

nous avons donc maintenant tous les éléments pour créer dynamiquement notre requête :

SELECT
  CONCAT(
    'SELECT CONCAT_WS(\'\',',
    GROUP_CONCAT(CONCAT('`', column_name, '`') ORDER BY column_name),
    ') AS all_columns FROM yourtable;')
FROM   `information_schema`.`columns` 
WHERE  `table_schema`=DATABASE() 
       AND `table_name`='yourtable'
INTO @sql;

cette requête définira la chaîne @sql sur quelque chose comme :

SELECT CONCAT_WS('', col1, col2, col3, ....) AS all_columns FROM yourtable

et ce code l'exécutera :

PREPARE stmt FROM @sql;
EXECUTE stmt;

Veuillez consulter le violon ici .