2012-07-06 77 views
2
SELECT * 
FROM t1 
JOIN t2 
ON t1.id1 = t2.id2 

會在MySQL上產生這些表的JOIN。如何將結果存儲在第三個表中而不必逐列定義。CREATE TABLE LIKE a JOIN

我試過這個來創建第三個表,但它不起作用。

CREATE TABLE t3 LIKE 
(
SELECT * 
FROM t1 
JOIN t2 
ON t1.id1 = t2.id2 
) a 
+1

你想讓新表保存'SELECT'的結果,還是隻希望它的模式基於那個結果? – eggyal 2012-07-06 22:38:50

回答

5

如果你想在新表中包含您的SELECT結果:

CREATE TABLE t3 SELECT * FROM t1 JOIN t2 ON t1.id1 = t2.id2 

或者,如果你只是希望它立足於加入的模式:

CREATE TABLE t3 SELECT * FROM t1 JOIN t2 ON t1.id1 = t2.id2 WHERE FALSE 
+2

需要注意的是,如果兩個表包含重複的列名,mysql將會拋出一個錯誤。 – 2012-07-06 22:42:28

+0

@MattGlover:好點。很明顯,在這種情況下,人們必須對這些列進行別名。 – eggyal 2012-07-06 22:43:10

1

這應該這樣做:

SELECT * into t3 
FROM t1 
JOIN t2 
ON t1.id1 = t2.id2 
+0

這個問題相當暗示't3'還沒有被定義。 – eggyal 2012-07-06 22:43:43

+2

我想我跳了槍,錯過了「mysql」的一部分; SQL Server確實用上面的方法創建了一個新表... – 2012-07-06 22:47:56

+0

Oooh,有趣。我不知道! – eggyal 2012-07-06 22:50:26

0

您可以創建一個view,其作用就像一個表:

CREATE VIEW t3 AS 
SELECT * 
FROM t1 
JOIN t2 
ON t1.id1 = t2.id2 

然後,你可以參考這個觀點在其他加入就好像它是自己的表。

+0

問題反而暗示OP希望獲得數據的快照,而不是實時副本。 – eggyal 2012-07-06 22:42:21