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

Sql 合并两个没有主键但行数相同的表,sql,join,union,sql-merge,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

我有两张桌子,看起来像那样。“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中实现这一点?是否可以使用简单的联接/联合,而不创建新表或其他内容?

一般来说,如果没有要联接的列,则不能简单地将两个表合并在一起。即使两个表具有相同数量的记录并且它们看起来是有序的,但实际上大多数RDBMS并不保证每个记录的存储或选择顺序


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

在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

您可以通过一个简单的join语句来实现这一点

SELECT table1.ID, table1.Value1, table1.Value2, table2.Value3
FROM table1
INNER JOIN table2
ON table1.ID = table2.ID;

尽管我仍然建议更改表,使其具有可以正确连接的主键和外键。

是的。看起来就像这样。行的数量和数据的顺序总是相同的,所以我必须以某种方式合并它。什么样的SQL风格?MySQL?关系数据库中可能重复的“和完全相同的顺序”-行没有“顺序”。只有使用
orderby
选择有序集,才能获得有序集。没有与表中没有保证的顺序完全相同的顺序。