需要针对给定方案

时间:2017-03-26 21:07:24

标签: mysql plsql isql

你能帮忙解决这个问题吗?我需要SQL查询以满足以下要求。

我有三张桌子。

表1

--------
ExNo | ExTyp
-------------
1000 | CONT  
2000 | REPO  
3000 | COMD  
4000 | CONT

表2

------
ExNo | ExTyp
-------------
1000 | RVRP  
2000 | COMD  
3000 | CONN  

表3

-------
ExCode| ExTyp | ExDesc 
-----------------------
ExTyp  | CONT   | Contain  
ExTyp  | COMD   | command  
ExTyp  | RVRP   | Reverse Post  
ExTyp  | CONN   | Connection  
ExTyp  | REPO   | Re Open  

主表是Table1。所以我的要求是只需要根据Table1.ExTyp = Table3.ExTyp

打印Table1.ExNo的Table3.ExDesc

第二个条件,如果Table1.ExTyp = CONT(仅适用于此CONT),那么我必须转到Table2并获得相应的Table2.ExTyp基于ExNo匹配,然后获取Table2.ExDesc for Table2.ExTyp。 (ExNo示例:1000)

第三个条件,包括Table1.ExNo不存在于Table2.ExNo for ExTyp = CONT,那么我应该在Table3中打印相同的CONT ExDesc,这是ExDesc ="包含" (例如:ExNo:4000)

需要的示例结果集:

ExNo | ExDesc
---------------
1000 | Reverse Post  
2000 | Re Open  
3000 | Command  
4000 | Contain  

如果您需要更多详细信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

您可以将table2与table1连接起来,并有条件地将table3与它连接。

select t1.ExNo,
    t3.ExDesc
from table1 t1
left join table2 t2 on t1.ExNo = t2.ExNo
join table3 t3 on t3.ExTyp = case 
        when t1.ExTyp = 'CONT'
            and t2.ExTyp is not null
            then t2.ExTyp
        else t1.ExTyp
        end
order by t1.ExNo;

产地:

ExNo    ExDesc
--------------------
1000    Reverse Post
2000    Re Open
3000    command
4000    Contain

Demo