以我的經驗奧姆斯將運行初始DESCRIBE查詢,以便它可以做一旦它有列名稱,這種東西適合你。但是,如果你堅持在一個查詢動態做這件事,你可以用純的MySQL這樣做:
-- config
SET @database = 'your_database';
SET @tableA = 'table1';
SET @tableB = 'table2';
-- table alias "a" columns
SET @fieldsA = NULL;
SELECT GROUP_CONCAT(CONCAT('a.', COLUMN_NAME), ' AS ',CONCAT('`a.', COLUMN_NAME,'`')) INTO @fieldsA
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = @database AND TABLE_NAME = @tableA;
-- table alias "b" columns
SET @fieldsB = NULL;
SELECT GROUP_CONCAT(CONCAT('b.', COLUMN_NAME), ' AS ',CONCAT('`b.', COLUMN_NAME,'`')) INTO @fieldsB
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = @database AND TABLE_NAME = @tableB;
-- some variables for readability
SET @fields = CONCAT(' ', @fieldsA, ',', @fieldsB,' ');
SET @tableAliasA = CONCAT(' ',@database, '.', @tableA,' a ');
SET @tableAliasB = CONCAT(' ',@database, '.', @tableB,' b ');
-- generate our final query
SET @query = CONCAT('CREATE TABLE new_table SELECT', @fields,
'FROM', @tableAliasA,
'INNER JOIN', @tableAliasB,
'ON a.myID = b.myId WHERE a.age > 10 and b.ice = ''melted''');
-- finally run the query:
PREPARE stmt1 FROM @query;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
-- if you have problems with the above query, uncomment the following to get the query so you can run it separately
-- SELECT @query;
我強烈建議不要使用這種解決方案雖然。我會盡早運行一個初始的DESCRIBE查詢,然後根據它生成查詢。另一種解決方案是創建一個臨時表作爲第二表的副本,然後重命名有問題的欄目,然後繼續加入它來產生您需要創建NEW_TABLE數據。 MySQL對於具有相同名稱的結果列沒有任何問題,這裏的問題是試圖創建一個具有兩個具有相同名稱的列的表。所以基本上你想要做的是明星選擇,但不包括列。
另一種方法是僅從兩個選項中選擇主鍵:
SELECT a.myID as `aId`, b.myId as `bId`
然後創建僅包含該表的表。然後,如果您需要某個特定表格的數據,只需加入它即可獲取您要查找的信息。你可以更進一步,並建立一個視圖爲你做這種事情。視圖可以爲您連接表格,並可以非常輕鬆地選擇您要查找的任何列。您也可以設置多個視圖。還要注意,視圖的行爲就像連接目的的表一樣。您可以使用表格加入視圖,或者您可以加入視圖等。
因此,而不是做你正在嘗試做的事 - 用另外兩個表中的數據創建一個新表 - - 考慮你是否真的在尋找VIEW。
你必須你的別名列,OP,這意味着寫出來。也許你可以想出一個非常快捷的方式,用兩個表之間的逗號來列出兩個表中的所有列? – JNevill
無論如何,它被認爲是一個糟糕的(即使相當普遍的)練習用'SELECT *'選擇;它會向您提供各種問題(例如,在隨後將這些列添加到所使用的表中的一個表中時,這會「隨機」使用沒有共用列名的表中斷公共查詢)。 _...以及任何半面體查詢編輯器都應該能夠吐出列列表以便爲您節省打字時間。@ – Uueerdo
@Uueerdo年輕的編碼人員會記住這是計算機爲計算機工作而不是爲人類工作的時間......但是是有道理的。當你有100列的時候,這會成爲一個不太理想的方式去做事情。我很容易想象一個世界,在這個世界中,SQL語言可以理解這種類型的查詢併爲每個列名添加前綴 – Dnaiel