2012-07-06 139 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