有表a
id表b
id stat
其中b表状态stat值有0,1,2
要从a表中查询出id,且在b表中不存在这id的状态是0或1的
表a,b数据如下WITH a AS(SELECT '1' AS ID FROM dual UNION ALL
SELECT '2' AS ID FROM dual UNION ALL
SELECT '3' AS ID FROM dual UNION ALL
SELECT '4' AS ID FROM dual UNION ALL
SELECT '5' AS ID FROM dual UNION ALL
SELECT '6' AS ID FROM dual ),
b AS(SELECT '1' AS ID,'2' AS stat FROM dual UNION ALL
SELECT '2' AS ID,'0' AS stat FROM dual UNION ALL
SELECT '3' AS ID,'1' AS stat FROM dual UNION ALL
SELECT '4' AS ID,'2' AS stat FROM dual )想要查询出的结果如下:id  stat
1    2
4    2
5    
6    

解决方案 »

  1.   


    select a.id as aid, b.id as bid,b.stat
    from a 
    left join b on a.id = b.id
    where b.stat not in (0,1)
    or    b.stat is null;
      

  2.   

    select * from a where not exisit (select 1 form b where a.id =b.id and (b.id = 0 or b.id = 1)
      

  3.   

    select a.id as id,b.stat as stat from 表a ,表b where 表a.id = 表b.id and 表a.id in (select id from 表b where stat=2 ) 
    试试这个
      

  4.   

    Select a.Id As A ,b.stat As B From a,b Where a.Id =b.Id(+) And a.Id Not In (Select Id From b Where stat In (0,1))
      

  5.   

    select * from b
    where not exists (select 1 from b where a.id=b.id)
    and b.statin (0,1)
      

  6.   

    #5楼  跟我得到的结果不一样呀
    #6楼  效果出来,不过我听说写sql死都不要用Not In 
    #7楼  sql有问题,我不懂这个什么意思,要改哪些东西
    目前,我是按#1楼的孙俪童鞋写的sql,select a.id as aid, b.id as bid,b.stat
    from a 
    left join b on a.id = b.id
    where b.stat ='2'
    or    b.stat is null;欢迎指正