Aby złączyć wszystkie kolumny w tabeli, nie można użyć słowa kluczowego *
, ale trzeba wyraźnie wymienić wszystkie kolumny:
SELECT CONCAT(col1, col2, col3, ....)
FROM yourtable
lub może chcesz używać CONCAT_WS
że pominie wartości null:
SELECT CONCAT_WS(',', col1, col2, col3, ....)
FROM yourtable
Jeśli nie chcesz podawać wszystkich nazw kolumn ręcznie, możesz użyć zapytania dinamicznego. To zapytanie zwróci wszystkie nazwy kolumn z tabeli:
SELECT `column_name`
FROM `information_schema`.`columns`
WHERE `table_schema`=DATABASE()
AND `table_name`='yourtable';
i korzystania GROUP_CONCAT można uzyskać listę wszystkich nazw kolumn:
GROUP_CONCAT(CONCAT('`', column_name, '`'))
cytowany w oddzielonych przecinkami format:
`col1`,`col2`,`col3`,`col4`,...
, więc teraz mamy wszystkie elementy, aby utworzyć naszą kwerendę dinamicznie:
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;
ta kwerenda będzie ustawić @sql ciąg coś takiego:
SELECT CONCAT_WS('', col1, col2, col3, ....) AS all_columns FROM yourtable
i kod ten będzie go wykonać:
PREPARE stmt FROM @sql;
EXECUTE stmt;
proszę zobaczyć skrzypce here.
Jakie byłoby praktyczne zastosowanie dla takiej funkcjonalności? –
Możesz wysłać zapytanie 'information_schema.columns', aby uzyskać listę kolumn i wstawić je do zapytania samodzielnie. –
Cóż, powiedzmy, że mam 100 kolumn i chciałbym wybrać je wszystkie połączone z łańcuchem oddzielonym przecinkami. Byłoby trochę pracy, aby ręcznie wprowadzić 100 nazw kolumn. Ale dlaczego także słowo kluczowe * pojawia się w pierwszej kolejności? – Blub