您能帮忙解决一下吗?我需要满足以下要求的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


主表是表1。所以我的要求是只需要基于Table1.ExTyp = Table3.ExTyp打印带有Table1.ExNo的Table3.ExDesc

第二个条件,如果Table1.ExTyp = CONT(仅针对此CONT),则我必须转到Table2并基于ExNo匹配获取对应的Table2.ExTyp,然后获取Table2.ExTyp的Table3.ExDesc。 (ExNo示例:1000)

第三个条件,假设Table2.ExNo中的Table1.ExNo不存在,例如ExTyp = CONT,那么我应该在Table3中打印相同的CONT ExDesc,即ExDesc =“ Contain”(示例ExNo:4000)

所需的示例结果集:

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


如果您需要更多详细信息,请告诉我。

最佳答案

您可以将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

10-04 19:45