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

MySQL sammenkæder alle kolonner

For at sammenkæde alle kolonner i en tabel kan du ikke bruge * søgeord, men du skal udtrykkeligt angive alle kolonner:

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

eller du vil måske bruge CONCAT_WS der springer null-værdier over:

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

Hvis du ikke ønsker at angive alle kolonnenavne manuelt, kan du bruge en dynamisk forespørgsel. Denne forespørgsel returnerer alle kolonnenavne i din tabel:

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

og ved at bruge GROUP_CONCAT kan du få en liste over alle kolonnenavne:

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

citeret i et kommasepareret format:

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

så nu har vi alle elementerne til at skabe vores forespørgsel dynamisk:

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;

denne forespørgsel vil sætte @sql-strengen til noget som:

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

og denne kode vil udføre den:

PREPARE stmt FROM @sql;
EXECUTE stmt;

Se venligst violin her .




  1. Vil du kombinere to forespørgsler for at kontrollere for dubletter i MySQL?

  2. Hvordan tilføjer man kommentarer i SQL?

  3. Henter kun et fast antal rækker i MySQL

  4. Hvad er forskellen mellem en midlertidig tabel og tabelvariabel i SQL Server?