用SQL查询两个表中相同的数据

有两个表,包含相同的字段,也有不同的字段且表2的数据多于表1,其中多的部分没有相同的数据,怎样把表1中有表2没有的字段加到表2中呢(数据相同部分),同时也保留表2中多的数... 有两个表,包含相同的字段,也有不同的字段且表2的数据多于表1 ,其中多的部分没有相同的数据,怎样把表1中有表2没有的字段加到表2中呢(数据相同部分),同时也保留表2中多的数据。 展开
 我来答
freechan10
2019-11-13 · TA获得超过2.9万个赞
知道小有建树答主
回答量:263
采纳率:68%
帮助的人:12.8万
展开全部

1、创建测试表;

create table test_col_1(id number, var varchar2(200));

create table test_col_2(id number, var varchar2(200));

2、插入测试数据,

insert into test_col_1 

select level*8, 'var'||level*8 from dual connect by level <= 20;

insert into test_col_2 

select level, 'var'||level from dual connect by level <= 100;

3、比较两表的数据,可以发现表2的数据多于表1;

select 'test_col_1' tbl_name, count(*) from test_col_1 t

union all

select 'test_col_2' tbl_name, count(*) from test_col_2 t

4、表1有部分比表2多的数据,

select * from test_col_1 

minus

select * from test_col_2;

5、插入表1多的数据,如表2,执行sql,可以发现有多条记录插入。

insert into test_col_2

select * from test_col_1 

minus

select * from test_col_2;

kas68310
推荐于2017-10-07 · TA获得超过3637个赞
知道大有可为答主
回答量:1468
采纳率:33%
帮助的人:1178万
展开全部
关键是第一步,你要找出表1中有,而表2中没有的数据行.
select t1.* from 表1 t1
left join 表2 t2 on t1.?=t2.? --以什么列相同判定为有,都在这里做等于
where isnull(t2.?,'noData')='noData' --如果表1有而表2也有的列,为null则说明未匹配上,这个列的值不能为null,可以默认为空,否则无法区为值为NULL或因为匹配不成功为NULL

查出表1中有而表2中没有数据,然后就是你的insert into 表2 select ...的问题了.
更多追问追答
追问
首先先谢谢你,我没太明白,问题是这样的,我单位代工资,我单位系统里有员工编号,而他们提供的数据不带编号(新增加的更没有了),这样我就得一个一个的对很麻烦,我想把员工编号直接加到他们提供的数据里而不影响他们的数据,谢谢您
追答
他们的数据有员工姓名没有?
我差不多明白你的意思了,是表2中想要增加一个列,这个列需要从表1去取?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
biocommando
2012-01-05 · TA获得超过4867个赞
知道大有可为答主
回答量:2395
采纳率:0%
帮助的人:1377万
展开全部
insert into 表2 (select 表1和表2都包含的字段 from 表1) 就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飘雨56
2012-01-05 · 一分耕耘一分收获,凡事预则立
飘雨56
采纳数:931 获赞数:4490

向TA提问 私信TA
展开全部
insert into 表2
select * from 表1 except select * from 表2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式