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