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 .