テーブル内のすべての列を連結するために、*
を使用することはできません。 キーワードですが、すべての列を明示的にリストする必要があります:
SELECT CONCAT(col1, col2, col3, ....)
FROM yourtable
または、CONCAT_WS
を使用することもできます null値をスキップします:
SELECT CONCAT_WS(',', col1, col2, col3, ....)
FROM yourtable
すべての列名を手動で指定したくない場合は、動的クエリを使用できます。このクエリは、テーブルのすべての列名を返します:
SELECT `column_name`
FROM `information_schema`.`columns`
WHERE `table_schema`=DATABASE()
AND `table_name`='yourtable';
GROUP_CONCATを使用すると、すべての列名のリストを取得できます。
GROUP_CONCAT(CONCAT('`', column_name, '`'))
カンマ区切り形式で引用:
`col1`,`col2`,`col3`,`col4`,...
これで、クエリを動的に作成するためのすべての要素が揃いました。
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;
このクエリは、@sql文字列を次のように設定します。
SELECT CONCAT_WS('', col1, col2, col3, ....) AS all_columns FROM yourtable
そしてこのコードはそれを実行します:
PREPARE stmt FROM @sql;
EXECUTE stmt;
フィドル