使用的是oracle,左表a含有會計科目acct_cd,假如a的會計科目為'1001',那么連接b表獲取余額amt,即
select * from a
left join b
using(cust_no)
當a的會計科目為'1002',則連接c表獲取余額,即
select * from a
left join c
using(cust_no)
現在有方案一:
select 一些欄位, case acct_cd when '1001' then b.amt, when '1002' then c.amt
from a
left join b
using(cust_no)
left join c
using(cust_no)
方案二:
select 一些欄位,amt
from a
left join b
using(cust_no)
where a.acct_cd = '1001'
union all
select 一些欄位,amt
from a
left join c
using(cust_no)
where a.acct_cd = '1002'
請問哪種方案更好呢,在實際情況中,科目比較多,如果用方案二代碼會顯得很長,而方案一效率似憾訓低一點?還有沒有更好的方案?謝謝大佬們
uj5u.com熱心網友回復:
方案一在存在一對多時可能會出bug。誰快誰慢要看情況。你要是想邏輯清晰一些,不如直接對余額表做一下預處理轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/64993.html
標籤:開發
上一篇:macbook下載檔案老是出錯
下一篇:mysql 查詢表記錄問題?
