sql >> Databáze >  >> RDS >> Mysql

MySQL zřetězení všech sloupců

Chcete-li zřetězit všechny sloupce v tabulce, nemůžete použít * klíčové slovo, ale musíte výslovně uvést všechny sloupce:

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

nebo můžete chtít použít CONCAT_WS to přeskočí hodnoty null:

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

Pokud nechcete zadávat všechny názvy sloupců ručně, můžete použít dynamický dotaz. Tento dotaz vrátí všechny názvy sloupců vaší tabulky:

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

a pomocí GROUP_CONCAT můžete získat seznam všech názvů sloupců:

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

v uvozovkách ve formátu odděleném čárkami:

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

takže nyní máme všechny prvky k vytvoření našeho dotazu dynamicky:

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;

tento dotaz nastaví řetězec @sql na něco jako:

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

a tento kód jej provede:

PREPARE stmt FROM @sql;
EXECUTE stmt;

Viz housle zde .




  1. Jak zlepšit výkon replikace v clusteru MySQL nebo MariaDB Galera

  2. Mzdový datový model

  3. Volejte funkci vracející sadu s argumentem pole vícekrát

  4. C# se připojuje k mysql prostřednictvím uživatelského ovládání