簡體   English   中英

Oracle SQL條件外部聯接使用案例語句

[英]Oracle SQL Conditional Outer Join using case statement

可以說我有三個表:

1. TableA with columns TableAID (PK), Desc Nullable

2. TableB with columns TableBID (PK), TableAID(FK) Nullable

3. TableC with columns TableCID (PK), TableBID (FK) Nullable, 
   TableAID (FK) Nullable, Start_Date, End_Date

如果TableC.TableBID不為null,則需要返回表A中的Desc,然后在TableB中使用TableAID(FK)來檢索Desc,否則在TableC中使用TableAID(FK)來檢索Desc

注意:TableC.TableBID或TableC.TableAID都可以為null。 在所有情況下,我仍然必須能夠返回TableC中的其他列。

這是我的代碼:

Select ta.desc, tc.start_date, tc.end_date
from TableC tc
Left outer join TableB tb
on case
when tc.TableBID  is not null then (
           tc.TableBID = tb.TableBID
           Left outer join TableA ta
           on tb.TableAID = ta.TableAID 
           --my concern here is that tb.TableAID can be null. Will it still work?
)
else tc.TableAID = ta.TableAID --my concern here is that tc.TableAID can be null. 
--WIll it still work?

我也擔心語法。 如果有更好的方式進行有條件的加入,請告知。 我正在使用oracle。 這段代碼將進入用於搜索過程的視圖(這就是為什么它必須返回所有內容而不考慮null的原因)。 謝謝你的幫助。

您可以將CASE放在SELECT子句中,並相應地連接表,如下所示:

SELECT CASE
           WHEN tb.tableAID IS NOTNULL THEN tab.desc
           ELSE tac.desc
       END AS desc
       -- or better: NVL(tab.desc, tac.desc) AS desc
       , tc.start_date
       , tc.end_date
  FROM tableC tc
  JOIN tableB tb ON tc.tableBID = tb.tableBID
  LEFT JOIN tableA tab ON tab.tableAID = tb.tableAID
  LEFT JOIN tableA tac ON tac.tableAID = tc.tableAID

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM