我有两张桌子,每张都有一列。我想将这两个表中的数据复制/合并到另一个包含两列的表中。因此,在下面的示例中,我希望 Table1 和 Table2 的数据进入 Table3 。
我使用了这个查询:
INSERT **TABLE3** (BIGNUMBER)
SELECT BIGNUMBER
FROM **TABLE1**;
INSERT **TABLE3** (SMALLNUMBER)
SELECT SMALLNUMBER
FROM **TABLE2**;
当我这样做时,它复制了Table1和Table2中的数据,但没有将数据放在同一行上。所以它最终是这样的:
我正在尝试将数据排成一行......匹配。所以BIGNUMBER 1234567812345678旁边应该有SMALLNUMBER 123456。如果我在查询,我可以使用JOIN和LIKE'MINALLNUMBER%'来做到这一点,但我不知道如何在这里做到这一点,使数据最终像这样:
没有必要将小数字与bignumber进行比较。当我将数据BULK插入到TABLE1和TABLE2中时,它们的顺序是相同的,因此只需将数据复制到TABLE3而不关心如果SMALL是BIG的开头就可以了。
这些表中根本没有任何关系。这是我能想到的最简单的形式。基本上两个平台需要并排合并。没有逻辑可以实现......从第1行开始,到BIGNUMBER结束。再次从第1行开始,在SMALLNUMBER上结束。重要的是,如果BIGBUMBER有50行而SMALLNUMBER有50行,最后仍然只有50行。
当我使用上面的查询时,我正在浏览MERGE上正在阅读的页面。现在我看一下这个我在任何地方都看不到MERGE ...所以也许我只需要了解如何使用MERGE。
答案 0 :(得分:0)
为了使用JOIN语句合并两个表,它们每个都必须有一个具有公共数据的列。你没有,但你可以介绍它:
id
类似,并将id
列的属性设置为autonumber
。
浏览表格以确保已分配id
列
数字的顺序正确。完成全面检查后确保行 编号正确,运行查询以合并表:
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
的更多信息