用sql语句比对2个表A和表B,并将比对出不同的数据存放在表C中,表A,B,C所以的列都是一样的,跪求。。。。

2024-11-03 08:08:02
推荐回答(4个)
回答1:

都几个列啊,列名都什么啊?要不没法写呀
而且不一样的,是A与B只要不一样都插入C里吗?还是只插A里有的,B里无的;或者B里有的,A里无的?
哎我,楼下那大哥,我估计人家用的不是oracle
----补充----
假设三个表都有字段1,字段2两个字段
你要插入的是,A,B都完全不相同的数据
insert into c
select a.字段1,a.字段2 from a,(select a.字段1,a.字段2 from a,b where a.字段1=b.字段1 and a.字段2=b.字段2) as d
where a.字段1<>d.字段1 and a.字段2<>d.字段2
union all
select b.字段1,b.字段2 from a,(select a.字段1,a.字段2 from a,b where a.字段1=b.字段1 and a.字段2=b.字段2) as d
where a.字段1<>d.字段1 and a.字段2<>d.字段2

回答2:

不知道你什么数据库。
我就简单说一下 Oracle 的例子

Oracle 里面, 有个 MINUS, 用于返回第一个表中有、第二个表中没有的数据

你可以执行

INSERT INTO C
SELECT * FROM A MINUS SELECT * FROM B;

INSERT INTO C
SELECT * FROM B MINUS SELECT * FROM A;

就可以了。

如果你的数据库是 DB2 、 SQL Server 或者 SQLite 或者 PostgreSQL

可以使用 INTERSECT 来 替换掉那个 MINUS

也就是

INSERT INTO C
SELECT * FROM A INTERSECT SELECT * FROM B;

INSERT INTO C
SELECT * FROM B INTERSECT SELECT * FROM A;

回答3:

create c as select * from a b where a. != b.

回答4:

inset into C
(select * from A minus select * from B)
union all
(select * from B minus select * from A)
;
commit;