比如3个table
T1,T2,T3
我想先从T1取出T1.FLAG
然后判断其值,再来查询T2或T3。也可以这样理解:
SELECT 
T1.*,
T.*
FROM T1, (IF T1.FLAG=0 THEN T2 ELSE T3) T
用一条SQL语句怎么实现

解决方案 »

  1.   

    这个要用动态sql,你查找下相关的资料
    单纯这样写肯定是不对的
      

  2.   

    看看
    select decode(t1.flag,'0',t2.colnam1,t3.colnam1) col1,decode(t1.flag,'0',t2.colnam2,t3.colnam2) col2 ...
      from t1,t2,t3
    where t1 = "条件"
      and t2 =  "条件"
      and t3 =  "条件"
    以及他们内部的相关条件
      

  3.   

    呵呵,T2和T3的表结构应该是相同的吧,猜测T1和T2应该是有字段关联的,T1和T3应该是有字段关联的
    select t1.* ,t2.* from t1, t2 
    where t1.col1 = t2.col1
    and t1.flag = 0
    union 
    select t1.* ,t3.* from t1, t3 
    where t1.col1 = t3.col1
    and t1.flag <> 0
      

  4.   

    這個應該要根據具體情況來確定SQL語句如何寫,如果t1、t2、t3之間有關聯字段,並且t2和t3的表結構類似(或僅從t2或t3中選擇幾個固定列),那就可以靜態的使用SQL語句即可,但如果t2、t3表結構完全不一樣,那可能就得使用動態SQL了
    樓主給出你的三個表結構,再給出你表中一些示例數據,再說出你要得到的結果,我們大家應該可以幫你解決這些個問題!!!!!!!
      

  5.   

    可以用sql中的case分支功能函数来实现啊, 像下面这样就行:
    select  
      case  
         when (select T1.flag from T1 where rownum=1) =0  --如果 T1.FLAG=0 则查询T2表
              then (select T1.某字段,T2.某字段 from T1,T2 where rownum=1) 
         else                                             --如果 T1.FLAG<>0 则查询T3表
                   (select T1.某字段,T3.某字段 from T1,T3 where rownum=1) 
      END 
    from dual;
    把你的表名替换成实际的表名就可以!!! 我在测试环境下试过的哦 
      

  6.   

    SELECT 
    T1.*,
    T.*
    FROM T1, (T2) T
    where T1.FLAG=0
    and ...union SELECT 
    T1.*,
    T.*
    FROM T1, (T3) T
    where T1.FLAG<>0
    and ...
      

  7.   

    decode函数南极飘雪的好象可以实现吧
      

  8.   

    用动态语句,语句中结合decode或case
      

  9.   

    SELECT
      Case t1.flag When 0 Then t2.a Else t3.a End a
    FROM t1,t2,t3
    WHERE ....