如何将一个 SQL 2005 Table 与另一个 Table 合并?
How do I merge one SQL 2005 Table with another Table?
我有两个 table,每个都有一列。我想 copy/merge 来自这两个 table 的数据到另一个 table 的两列。因此,在下面的示例中,我希望 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 'SMALLNUMBER%' 来执行此操作,但我不确定如何在此处执行此操作以使数据最终如下所示:
将小数与大数进行比较并不一定很花哨。当我将数据批量插入 TABLE1 和 TABLE2 时,它们的顺序相同,因此只需将数据复制到 TABLE3 中而不关心 SMALL 是否是 BIG 的开始对我来说很好。
这些table完全没有关系。这是我能想到的最简单的形式。基本上是两个需要并排合并的平面 table。没有实现逻辑...从第 1 行开始,到 BIGNUMBER 结束。再次从第 1 行开始,直到 SMALLNUMBER 结束。重要的是如果BIGBUMBER有50行,SMALLNUMBER有50行,最后还是只有50行。
当我使用上面的查询时,我正在离开我在 MERGE 上阅读的页面。现在我查看了这个,我在任何地方都看不到 MERGE ...所以也许我只需要了解如何使用 MERGE。
为了使用 JOIN 语句合并两个 table,它们每个都必须有一个包含公共数据的列。你没有那个,但你可以介绍一下:
- 编辑第一个 table 的结构。添加一个名为 something 的列
喜欢
id
并将 id
列的属性设置为 autonumber
。
浏览 table 以确保已分配 id
列
数字顺序正确。
- 对第二个做同样的事情table。
在你做了彻底的检查以确保行是正确的之后
编号正确,运行 合并 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
的更多信息
我有两个 table,每个都有一列。我想 copy/merge 来自这两个 table 的数据到另一个 table 的两列。因此,在下面的示例中,我希望 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 'SMALLNUMBER%' 来执行此操作,但我不确定如何在此处执行此操作以使数据最终如下所示:
将小数与大数进行比较并不一定很花哨。当我将数据批量插入 TABLE1 和 TABLE2 时,它们的顺序相同,因此只需将数据复制到 TABLE3 中而不关心 SMALL 是否是 BIG 的开始对我来说很好。
这些table完全没有关系。这是我能想到的最简单的形式。基本上是两个需要并排合并的平面 table。没有实现逻辑...从第 1 行开始,到 BIGNUMBER 结束。再次从第 1 行开始,直到 SMALLNUMBER 结束。重要的是如果BIGBUMBER有50行,SMALLNUMBER有50行,最后还是只有50行。
当我使用上面的查询时,我正在离开我在 MERGE 上阅读的页面。现在我查看了这个,我在任何地方都看不到 MERGE ...所以也许我只需要了解如何使用 MERGE。
为了使用 JOIN 语句合并两个 table,它们每个都必须有一个包含公共数据的列。你没有那个,但你可以介绍一下:
- 编辑第一个 table 的结构。添加一个名为 something 的列
喜欢
id
并将id
列的属性设置为autonumber
。 浏览 table 以确保已分配id
列 数字顺序正确。 - 对第二个做同样的事情table。
在你做了彻底的检查以确保行是正确的之后 编号正确,运行 合并 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