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 .