如何将一个 SQL 2005 Table 与另一个 Table 合并?

How do I merge one SQL 2005 Table with another Table?

我有两个 table,每个都有一列。我想 copy/merge 来自这两个 table 的数据到另一个 table 的两列。因此,在下面的示例中,我希望 Table1Table2 中的数据进入 Table3.

我使用了这个查询:

INSERT **TABLE3** (BIGNUMBER)
SELECT BIGNUMBER
FROM **TABLE1**;
INSERT **TABLE3** (SMALLNUMBER)
SELECT SMALLNUMBER
FROM **TABLE2**;

当我这样做时,它从 Table1 和 Table2 复制了数据,但没有将数据放在同一行。所以它最终变成了这样:

我正在尝试让数据对齐...匹配。所以 BIGNUMBER 1234567812345678 旁边应该有 SMALLNUMBER 123456。如果我正在查询,我可以使用 JOIN 和 LIKE 'SMALLNUMBER%' 来执行此操作,但我不确定如何在此处执行此操作以使数据最终如下所示:

将小数与大数进行比较并不一定很花哨。当我将数据批量插入 TABLE1 和 TABLE2 时,它们的顺序相同,因此只需将数据复制到 TABLE3 中而不关心 SMALL 是否是 BIG 的开始对我来说很好。

这些table完全没有关系。这是我能想到的最简单的形式。基本上是两个需要并排合并的平面 table。没有实现逻辑...从第 1 行开始,到 BIGNUMBER 结束。再次从第 1 行开始,直到 SMALLNUMBER 结束。重要的是如果BIGBUMBER有50行,SMALLNUMBER有50行,最后还是只有50行。

当我使用上面的查询时,我正在离开我在 MERGE 上阅读的页面。现在我查看了这个,我在任何地方都看不到 MERGE ...所以也许我只需要了解如何使用 MERGE。

为了使用 JOIN 语句合并两个 table,它们每个都必须有一个包含公共数据的列。你没有那个,但你可以介绍一下:

  1. 编辑第一个 table 的结构。添加一个名为 something 的列 喜欢 id 并将 id 列的属性设置为 autonumber。 浏览 table 以确保已分配 id 列 数字顺序正确。
  2. 对第二个做同样的事情table。
  3. 在你做了彻底的检查以确保行是正确的之后 编号正确,运行 合并 tables:

    的查询

    SELECT TABLE1.id, TABLE1.BIGNUMBER, TABLE2.SMALLNUMBER INTO TABLE3 FROM TABLE1 INNER JOIN TABLE2 ON TABLE1.id = TABLE2.id

如果数字的顺序不重要并且您不想像 jcropp 所建议的那样向源表中添加另一个字段,您可以在 CTE 中使用 ROW_NUMBER() 函数来对齐每行的编号,然后根据它们进行连接

WITH C1 AS(
    SELECT ROW_NUMBER() OVER (ORDER BY TABLE1.BIGNUMBER) AS Rn1
           ,BIGNUMBER
    FROM TABLE1
)
,C2 AS(
    SELECT ROW_NUMBER() OVER (ORDER BY TABLE2.SMALLNUMBER) AS Rn2
           ,SMALLNUMBER
    FROM TABLE2
)
INSERT INTO TABLE3
SELECT C1.BIGNUMBER
       ,C2.SMALLNUMBER
FROM C1
INNER JOIN C2 ON C1.Rn1 = C2.Rn2

有关ROW_NUMBER(), CTE and INSERT INTO SELECT

的更多信息