求一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)。
实测数据:
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)
这样好像也行