Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL verkettet alle Spalten

Um alle Spalten in einer Tabelle zu verketten, können Sie den * nicht verwenden Schlüsselwort, aber Sie müssen alle Spalten explizit auflisten:

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

oder Sie möchten vielleicht CONCAT_WS verwenden die Nullwerte überspringt:

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

Wenn Sie nicht alle Spaltennamen manuell angeben möchten, können Sie eine dynamische Abfrage verwenden. Diese Abfrage gibt alle Spaltennamen Ihrer Tabelle zurück:

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

und mit GROUP_CONCAT erhalten Sie eine Liste aller Spaltennamen:

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

in Anführungszeichen, in einem durch Kommas getrennten Format:

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

Jetzt haben wir also alle Elemente, um unsere Abfrage dynamisch zu erstellen:

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;

Diese Abfrage setzt die @sql-Zeichenfolge auf etwas wie:

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

und dieser Code wird es ausführen:

PREPARE stmt FROM @sql;
EXECUTE stmt;

Siehe fiddle hier .