Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL concatena tutte le colonne

Per concatenare tutte le colonne di una tabella, non puoi utilizzare il * parola chiave, ma devi elencare esplicitamente tutte le colonne:

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

oppure potresti voler usare CONCAT_WS che salterà i valori null:

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

Se non desideri specificare manualmente tutti i nomi delle colonne, puoi utilizzare una query dinamica. Questa query restituirà tutti i nomi delle colonne della tabella:

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

e usando GROUP_CONCAT puoi ottenere un elenco di tutti i nomi di colonna:

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

tra virgolette, in un formato separato da virgole:

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

quindi ora abbiamo tutti gli elementi per creare la nostra query in modo dinamico:

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;

questa query imposterà la stringa @sql su qualcosa del tipo:

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

e questo codice lo eseguirà:

PREPARE stmt FROM @sql;
EXECUTE stmt;

Si prega di vedere violino qui .