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

时间:2015-03-29 04:39:20

标签: sql merge insert

我有两张桌子,每张都有一列。我想将这两个表中的数据复制/合并到另一个包含两列的表中。因此,在下面的示例中,我希望 Table1 Table2 的数据进入 Table3

我使用了这个查询:

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

当我这样做时,它复制了Table1和Table2中的数据,但没有将数据放在同一行上。所以它最终是这样的: Simple SQL Merge Wrong

我正在尝试将数据排成一行......匹配。所以BIGNUMBER 1234567812345678旁边应该有SMALLNUMBER 123456。如果我在查询,我可以使用JOIN和LIKE'MINALLNUMBER%'来做到这一点,但我不知道如何在这里做到这一点,使数据最终像这样: Simple SQL Merge Correct

没有必要将小数字与bignumber进行比较。当我将数据BULK插入到TABLE1和TABLE2中时,它们的顺序是相同的,因此只需将数据复制到TABLE3而不关心如果SMALL是BIG的开头就可以了。

这些表中根本没有任何关系。这是我能想到的最简单的形式。基本上两个平台需要并排合并。没有逻辑可以实现......从第1行开始,到BIGNUMBER结束。再次从第1行开始,在SMALLNUMBER上结束。重要的是,如果BIGBUMBER有50行而SMALLNUMBER有50行,最后仍然只有50行。

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

2 个答案:

答案 0 :(得分:0)

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

  1. 编辑第一个表的结构。添加一个名为something的列 与id类似,并将id列的属性设置为autonumber。 浏览表格以确保已分配id列 数字的顺序正确。
  2. 对第二张表格做同样的事情。
  3. 完成全面检查后确保行 编号正确,运行查询以合并表:

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

答案 1 :(得分:0)

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

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()CTEINSERT INTO SELECT

的更多信息