一个高难度的SQL语句,不知道能不能实现。
如果表A有符合条件的,就取A的记录,如果没有就取表B的记录。

解决方案 »

  1.   

    写了一个例子,你可以参考一下:SQL> select * from a;     C1 C2
    ------- --------------------
        100 Steven
        101 Neena
        102 Lex
        103 Alexander
        104 Bruce
        105 David6 rows selectedSQL> select * from b;     C1 C2
    ------- --------------------
        103 Alexander
        104 Bruce
        105 David
        106 Valli
        107 Diana
        108 Nancy
        109 Daniel7 rows selectedSQL> 
    SQL> SELECT *
      2    FROM a
      3   WHERE c1 > 101
      4  UNION
      5  SELECT *
      6    FROM b
      7   WHERE c1 > 101 AND NOT EXISTS (SELECT 1
      8                                  FROM a
      9                                 WHERE a.c1 > 101 AND rownum <=1);     C1 C2
    ------- --------------------
        102 Lex
        103 Alexander
        104 Bruce
        105 DavidSQL> 
    SQL> SELECT *
      2    FROM a
      3   WHERE c1 > 106
      4  UNION
      5  SELECT *
      6    FROM b
      7   WHERE c1 > 106 AND NOT EXISTS (SELECT 1
      8                                  FROM a
      9                                 WHERE a.c1 > 106 AND rownum <=1);     C1 C2
    ------- --------------------
        107 Diana
        108 Nancy
        109 DanielSQL> 
    SQL> SELECT *
      2    FROM a
      3   WHERE c1 = 101
      4  UNION
      5  SELECT *
      6    FROM b
      7   WHERE c1 =101 AND NOT EXISTS (SELECT 1
      8                                  FROM a
      9                                 WHERE a.c1 = 101 AND rownum <=1);     C1 C2
    ------- --------------------
        101 NeenaSQL> 
    SQL> SELECT *
      2    FROM a
      3   WHERE c1 = 104
      4  UNION
      5  SELECT *
      6    FROM b
      7   WHERE c1 =104 AND NOT EXISTS (SELECT 1
      8                                  FROM a
      9                                 WHERE a.c1 = 104 AND rownum <=1);     C1 C2
    ------- --------------------
        104 BruceSQL> 
    SQL> SELECT *
      2    FROM a
      3   WHERE c1 = 108
      4  UNION
      5  SELECT *
      6    FROM b
      7   WHERE c1 =108 AND NOT EXISTS (SELECT 1
      8                                  FROM a
      9                                 WHERE a.c1 = 108 AND rownum <=1);     C1 C2
    ------- --------------------
        108 NancySQL>
      

  2.   

    select * from a
    where ...unionselect * from b
    where ...
    and (select count(*) from a
         where ...)=0
      

  3.   

    select decode(aCount.cnt,0,(select * from B),(select from A)) from (select count(*) cnt from A ) aCount
      

  4.   

    select a.c1,a.c2 from a
    union
     select b.c1,b.c2 from b where (b.c1,b.c2 ) not in(select a.c1,a.c2 from a)