12
爲什麼我們不能在MySQL中使用*關鍵字連接?MySQL連接所有列
SELECT concat(*) FROM table
或
SELECT group_concat(*) FROM table
有沒有其他的辦法,我們可以在一列訪問值,而無需顯式使用的列名?
爲什麼我們不能在MySQL中使用*關鍵字連接?MySQL連接所有列
SELECT concat(*) FROM table
或
SELECT group_concat(*) FROM table
有沒有其他的辦法,我們可以在一列訪問值,而無需顯式使用的列名?
要連接的所有表中的列,你不能使用*
關鍵字,但你需要明確列出所有列:
SELECT CONCAT(col1, col2, col3, ....)
FROM yourtable
,或者您可能需要使用CONCAT_WS
將跳過空值:
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`,...
所以現在我們有所有元素來創建我們的查詢dinamically:
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;
請參閱小提琴here。
這種功能的實際用途是什麼? –
您可以查詢'information_schema.columns'以獲取列的列表並將它們自己插入到查詢中。 –
好吧,假設我有100列,並希望將它們全部連接到由逗號分隔的字符串。手動輸入100個列名是相當繁重的工作。但是,爲什麼在那裏首先有*關鍵字呢? – Blub