请问实现两个表的差集和交集的sql语句怎么写?(100分)

  • 主题发起人 主题发起人 stamm
  • 开始时间 开始时间
S

stamm

Unregistered / Unconfirmed
GUEST, unregistred user!
我用except和intersect提示语法错误
 
用union可以实现交集,差集的话,在加上一些WHERE子句,不过具体怎么实现你还是自己去想想吧,
这问题一下子说不清楚,要通过实践。
 
是不是既属于A又属于B的集合??
如果是这样的话,
select * from
(select * from a union select * from b) c,
where c.id in (select id from a) and c.id (select id from b)
 
to zyg_zm
union不是并集的操作吗
我实在是想不出,假设表只有两个字段(name,id)能不能举个例子
 
name和id 都不一定唯一
 
哦,对,union是并集,我刚才看错了,理解错了。这样其实很不好做啊,多用几个
条件语句不行吗,你试试建一个临时表会不会方便一点。
我没办法帮你了,我没时间去试
 
建一个视图,通过设置视图的条件可以实现
Access和MS SQL都支持视图
 

交集
select * from
(select * from a union select * from b) c,
where c.id in (select id from a) and c.id (select id from b)
差集
select * from a where a.id not in (select id from b)
union
select * from b where b.id not in (select id from a)
 
Oracle:
交: intersect
并: union、union all
差: minus
如:
select * from 表1
intersect
select * from 表2
 
这样情况如何解决
表一
name id
aa 123
bb 456
cc 456
表二
name id
dd 789
cc 456
ee 456
交集所得的结果应是
name id
cc 456
差集所得的结果应是
name id
aa 123
bb 456
 
交集
select a.name a.id
from 表1 a,表2 b
where a.name=b.name and a.id=b.id
差集用book523的方法
 
多人接受答案了。
 
后退
顶部