with t1 as(
select '1' id ,'test1' name, '1' codes from dual
union all
select '1' id ,'test1' name, '11' codes from dual
union all
select '2' id ,'test2' name, '2' codes from dual
union all
select '2' id ,'test2' name, '22' codes from dual
union all
select '3' id ,'test3' name, '3' codes from dual
),
t2 as(
select '1' id ,'test1' name, '11' codes from dual
union all
select '1' id ,'test1' name, '111' codes from dual
union all
select '2' id ,'test2' name, '2' codes from dual
)有表t1,t2,如上;
现在要查询出,t1.id=t2.id and t1.name= t2.name 且t1中codes在t2中不存在的记录;
上面的结果应该是这样的:
id  name  codes
1   test1  1
2   test2  22

解决方案 »

  1.   

    SELECT * FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE id=t1.id AND NAME=t1.NAME )
    AND codes NOT IN (SELECT DISTINCT codes FROM t2)
    或者
    SELECT * FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE id=t1.id AND NAME=t1.NAME )
    MINUS 
    SELECT * FROM t2
      

  2.   


    select * from t1
    where not exists (select 1 from t2
    where t1.id=t2.id and t1.name= t2.name and t1.codes=t2.codes)
    and exists(select 1 from t2
    where t1.id=t2.id and t1.name= t2.name);
      

  3.   

    其实需求是,要t1,t2存的信息会差不多,t1会增量,id+name会增加新的codes;
    需要将已经存在于t2表中id+name,在t1表中新增的codes的记录查询出来;我不大清楚,在主贴中,我那个说法合理不