Sql 合并两个没有主键但行数相同的表
我有两张桌子,看起来像那样。“Value1”类似于第二个键,ID+Value1=“Primary”键,但它不在表设置中,并且第二个表中缺少Value1字段,因此我无法加入它 但是第一个和第二个表的行数和顺序总是相同的 表1: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
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
选择有序集,才能获得有序集。没有与表中没有保证的顺序完全相同的顺序。