MySQL - 如何创建一个新表,它是两个现有表的主键上的连接

时间:2010-01-21 19:05:49

标签: mysql join merge create-table

我有两个现有的表,除了主ID(varchar,而不是int)之外,具有不同的字段。我想创建一个第三个表,它基本上是这两个表的合并,这样对于给定的主键,我在一个表中包含所有字段。

这样做的原因是什么?

非常感谢

4 个答案:

答案 0 :(得分:29)

CREATE TABLE result AS 
  (SELECT first.*, 
          second.f1, 
          second.f2, 
          second.f3 
   FROM   first 
          INNER JOIN second 
                  ON first.id = second.id);

要获取视图,请执行相同操作,但将“TABLE”替换为“VIEW”。如果您使用表而不是视图,请确保添加主键,因为默认情况下不会添加主键。

答案 1 :(得分:1)

如果您确定在给定主ID的两个表中都有一行且只有一行,那么这应该有效:

SELECT
    tablea.field1, tablea.field2, tablea.field3, ... tablea.fieldn, <---- field list
    tableb.field1, tableb.field2, tableb.field3, ... tableb.fieldm  <---- field list
FROM
    tablea, tableb
WHERE
    tablea.primaryID = tableb.primaryID

如果您实际上不需要它们,您可能希望从字段列表中省略tablea和tableb的主ID字段(在此查询中,由于tablea.primaryID = tableb.primaryID条件,它们将包含相同的值)。

VIEW的语法也相对类似。

答案 2 :(得分:1)

对于MS SQL,请使用此

SELECT * INTO result 
FROM  table1
INNER JOIN table2
ON table1.id = table2.id

答案 3 :(得分:-1)

为什么要创建新表?为什么不在需要数据时执行查询?如果您只是在主键上连接两个表,那么大部分数据访问时间将用于将数据编组回应用程序。在加入桌子之前你不会节省太多时间,而且你会占用很多空间。此外,您正在瞄准您的大脚趾,只是等待您第一次更新源表并忘记运行更新脚本以将更改复制到您的联接表。重复数据是 evil ,但有时它是必要的。这听起来不像其中一次。