当前位置: 代码迷 >> Oracle管理 >> 求一sql,求2个表的补集,该如何处理
  详细解决方案

求一sql,求2个表的补集,该如何处理

热度:36   发布时间:2016-04-24 05:31:15.0
求一sql,求2个表的补集
表A 主码为 产品(xh) 日期(rq)

表B为 主码为 产品(xh) 日期(rq)

其中,表B为A的一个子集

怎么才能把 A 不包括 B 的那部分数据列出来,交集好弄,补集怎么写sql

------解决方案--------------------
如果是主key的话,这样就应该可以了
select * from A,B
where A.xh != B.xh and A.rq != B.rq
------解决方案--------------------
这哪是补集啊,这是差集啊(A-B)。
实测数据:
SQL code
CREATE TABLE T150(    xh NUMBER(2),    rq DATE);INSERT INTO T150 VALUES(0, to_date('2012-02-27', 'YYYY-MM-DD'));INSERT INTO T150 VALUES(0, to_date('2012-02-28', 'YYYY-MM-DD'));INSERT INTO T150 VALUES(0, to_date('2012-02-29', 'YYYY-MM-DD'));INSERT INTO T150 VALUES(1, to_date('2012-03-01', 'YYYY-MM-DD'));INSERT INTO T150 VALUES(1, to_date('2012-03-02', 'YYYY-MM-DD'));INSERT INTO T150 VALUES(1, to_date('2012-03-03', 'YYYY-MM-DD'));INSERT INTO T150 VALUES(2, to_date('2012-03-06', 'YYYY-MM-DD'));INSERT INTO T150 VALUES(2, to_date('2012-03-07', 'YYYY-MM-DD'));INSERT INTO T150 VALUES(2, to_date('2012-03-08', 'YYYY-MM-DD'));INSERT INTO T150 VALUES(3, to_date('2012-03-10', 'YYYY-MM-DD'));INSERT INTO T150 VALUES(3, to_date('2012-03-11', 'YYYY-MM-DD'));INSERT INTO T150 VALUES(3, to_date('2012-03-12', 'YYYY-MM-DD'));CREATE TABLE T151(    xh NUMBER(2),    rq DATE);-- T151中的数据是典型的,(1条未取,取1条,取2条,全取)INSERT INTO T151 VALUES(1, to_date('2012-03-01', 'YYYY-MM-DD'));INSERT INTO T151 VALUES(2, to_date('2012-03-06', 'YYYY-MM-DD'));INSERT INTO T151 VALUES(2, to_date('2012-03-07', 'YYYY-MM-DD'));INSERT INTO T151 VALUES(3, to_date('2012-03-10', 'YYYY-MM-DD'));INSERT INTO T151 VALUES(3, to_date('2012-03-11', 'YYYY-MM-DD'));INSERT INTO T151 VALUES(3, to_date('2012-03-12', 'YYYY-MM-DD'));
------解决方案--------------------
select * from a where (xh,rq) not in(select xh,rq from b)

这样好像也行
  相关解决方案