sql >> Databasteknik >  >> RDS >> Mysql

MySQL sammanlänkar alla kolumner

För att sammanfoga alla kolumner i en tabell kan du inte använda * nyckelord, men du måste uttryckligen lista alla kolumner:

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

eller så kanske du vill använda CONCAT_WS som hoppar över nullvärden:

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

Om du inte vill ange alla kolumnnamn manuellt kan du använda en dynamisk fråga. Den här frågan returnerar alla kolumnnamn i din tabell:

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

och med GROUP_CONCAT kan du få en lista över alla kolumnnamn:

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

citerad, i ett kommaseparerat format:

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

så nu har vi alla element för att skapa vår fråga dynamiskt:

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;

den här frågan kommer att ställa in @sql-strängen till något som:

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

och den här koden kommer att köra den:

PREPARE stmt FROM @sql;
EXECUTE stmt;

Se fiolen här .




  1. Hur man optimerar en ORDER BY för en beräknad kolumn på en MASSIV MySQL-tabell

  2. Använda Python och MySQL i ETL-processen:Använda Python och SQLAlchemy

  3. Sammanfoga flera tabeller i SQL

  4. Hur konverterar man MySQL-tid till UNIX-tidsstämpel med PHP?