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 .