合并两个没有主键但行数相同的表

时间:2015-06-16 05:57:52

标签: sql join union sql-merge

我有两张桌子,看起来像那样。 “Value1”类似于第二个键,ID + Value1 =“Primary”键,但它不在表设置中,并且第二个表中缺少Value1字段,因此我无法加入它。

但是第一个和第二个表的始终行数相同且订单完全相同!

表1:

ID    Value1   Value2
10    1        100
10    2        200
20    1        250
30    1        150
30    2        125

表2:

ID   Value 3
10   50
10   60
20   70
30   80
30   25

结果我希望第二个表与第一个表合并:

ID   Value1   Value2   Value3
10   1        100      50
10   2        200      60
20   1        250      70
30   1        150      80
30   2        125      25

如何在SQL中执行此操作?是否可以使用简单的连接/联合,而无需创建新表或其他东西?

3 个答案:

答案 0 :(得分:1)

通常,在没有JOIN列的列的情况下,您不能简单地将两个表合并在一起。即使两个表具有相同数量的记录并且它们看起来有序,但实际上大多数RDBMS并不保证每个记录的存储或选择顺序。

您应该重新考虑数据库设计,并在2个表中包含主/外键。

答案 1 :(得分:1)

在TSQL中,您可以写为:

;with CTEtab1 as
(select 
 ID,
 Value1,
 Value2,
 row_number() over (order by Id asc) as rownum
 from tab1)
  ,CTEtab2 as
 (select 
 ID,
 Value3,
 row_number() over (order by Id asc) as rownum
 from tab2)
 select T1.Id,T1.Value1,T1.Value2,T2.Value3 
 from 
 CTEtab1 T1
 join CTEtab2 T2 
 on T1.rownum=T2.rownum

Demo

答案 2 :(得分:0)

您可以使用简单的连接语句

来完成此操作
SELECT table1.ID, table1.Value1, table1.Value2, table2.Value3
FROM table1
INNER JOIN table2
ON table1.ID = table2.ID;

虽然我仍然建议改变表格,使它们具有正确连接它们的主键和外键。