Om alle kolommen in een tabel samen te voegen, kunt u de *
. niet gebruiken zoekwoord, maar u moet alle kolommen expliciet vermelden:
SELECT CONCAT(col1, col2, col3, ....)
FROM yourtable
of misschien wilt u CONCAT_WS
. gebruiken die null-waarden overslaat:
SELECT CONCAT_WS(',', col1, col2, col3, ....)
FROM yourtable
Als u niet alle kolomnamen handmatig wilt opgeven, kunt u een dynamische query gebruiken. Deze zoekopdracht retourneert alle kolomnamen van uw tabel:
SELECT `column_name`
FROM `information_schema`.`columns`
WHERE `table_schema`=DATABASE()
AND `table_name`='yourtable';
en met GROUP_CONCAT kunt u een lijst met alle kolomnamen verkrijgen:
GROUP_CONCAT(CONCAT('`', column_name, '`'))
geciteerd, in een door komma's gescheiden formaat:
`col1`,`col2`,`col3`,`col4`,...
dus nu hebben we alle elementen om onze query dinamisch te maken:
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;
deze query stelt de @sql-tekenreeks in op zoiets als:
SELECT CONCAT_WS('', col1, col2, col3, ....) AS all_columns FROM yourtable
en deze code zal het uitvoeren:
PREPARE stmt FROM @sql;
EXECUTE stmt;
Zie fiddle hier .