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 .