Aby połączyć wszystkie kolumny w tabeli, nie możesz użyć *
słowo kluczowe, ale musisz wyraźnie wymienić wszystkie kolumny:
SELECT CONCAT(col1, col2, col3, ....)
FROM yourtable
lub możesz użyć CONCAT_WS
który pominie wartości null:
SELECT CONCAT_WS(',', col1, col2, col3, ....)
FROM yourtable
Jeśli nie chcesz ręcznie określać wszystkich nazw kolumn, możesz użyć zapytania dynamicznego. To zapytanie zwróci wszystkie nazwy kolumn w Twojej tabeli:
SELECT `column_name`
FROM `information_schema`.`columns`
WHERE `table_schema`=DATABASE()
AND `table_name`='yourtable';
a używając GROUP_CONCAT możesz uzyskać listę wszystkich nazw kolumn:
GROUP_CONCAT(CONCAT('`', column_name, '`'))
cytowany, w formacie oddzielonym przecinkami:
`col1`,`col2`,`col3`,`col4`,...
więc teraz mamy wszystkie elementy do dynamicznego tworzenia naszego zapytania:
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;
to zapytanie ustawi ciąg @sql na coś takiego:
SELECT CONCAT_WS('', col1, col2, col3, ....) AS all_columns FROM yourtable
a ten kod go wykona:
PREPARE stmt FROM @sql;
EXECUTE stmt;
Zobacz skrzypce tutaj .