简单的说我要求3条结果的交集,但是如果结果为空,就不与它求交集。select bc.vc_branch_no, bc.vc_branch_name
      from branch bc
     where bc.c_branch_type = '1'
       and bc.l_country = 0
    intersect
    select bp.vc_branch_no, bp.vc_branch_name
      from branch bp
     where bp.c_branch_type = '1'
       and bp.l_province = 12345    intersect
    select bt.vc_branch_no, bt.vc_branch_name
      from branch bt
     where bt.c_branch_type = '1'
       and bt.l_city = 0;比如这样  如果第3个根据城市来查,没有结果,那就取省的结果。如果城市有结果那就已城市的结果集为准。
不知道能不能一条SQL搞定,是一条哦。

解决方案 »

  1.   

    要用过程吧 
    先判断是否为空 然后再intersect
      

  2.   

    可以用case when 判断啊
      

  3.   


    create table 问问题请先造数据 (省 varchar(10), 市 varchar(10));
    insert into 问问题请先造数据 values
    ('广东','广州'),
    ('广东','珠海'),
    ('云南','大理'),
    ('云南','昆明');commit;select * 
    from (
    select 省, 市
    , (case when 市 = '广州' then 1 else 2 end) LVL
    , min(case when 市 = '广州' then 1 else 2 end) 
    over (partition by 省) MIN_LVL
    from 问问题请先造数据
    where (省 = '广东' or 市 = '广州')
    ) a 
    where LVL = MIN_LVL
    ; select * 
    from (
    select 省, 市
    , (case when 市 = '惠州' then 1 else 2 end) LVL
    , min(case when 市 = '惠州' then 1 else 2 end) 
    over (partition by 省) MIN_LVL
    from 问问题请先造数据
    where (省 = '广东' or 市 = '惠州')
    ) a 
    where LVL = MIN_LVL
    ;