12

我有两个现有的表,具有不同的字段,除了 Primary ID(a varchar,不是 an int)。我想创建第三个表,它本质上是这两个表的合并,这样对于给定的主键,我将所有字段都放在一个表中。

如何才能做到这一点?

4

4 回答 4

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

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

于 2010-01-21T19:49:08.440 回答
3

如果您确定对于给定的主 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条件,两者都将包含相同的值)。

a 的语法也相对相似VIEW

于 2010-01-21T19:13:41.837 回答
0

对于 MS SQL 使用这个

SELECT * INTO result 
FROM  table1
INNER JOIN table2
ON table1.id = table2.id
于 2017-06-21T12:51:44.797 回答
-3

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

于 2010-01-21T20:08:03.787 回答