[英]How do I conditionally select a field from one of two tables?
我有兩個表的發票和未結清的付款,它們都具有以下共同點:invoice_id和balance。 我想在MySQL中進行選擇,從而可以:
[偽代碼]
if(invoice_id exists in pending_payments table) {
select balance from pending_payments where invoice_id = yadayadayada
} else {
select balance from invoices where invoice_id = yadayadayada
}
這在MySQL中甚至可行嗎? 如果是這樣,怎么辦?
select i.invoice_id, coalesce(pp.balance, i.balance) as Balance
from invoices i
left outer join pending_payments pp on i.invoice_id = pp.invoice_id
讓我知道對於同一invoice_id
, pending_payments
是否可以有多行,我將提出一個替代解決方案。
我喜歡OrbMan的解決方案(我認為這是最直觀的),但是這是另一種方式-從一個表中選擇所有表,然后從第二個表中選擇未選擇的表。
select invoice_id, balance from pending_payments where invoice_id = yadayadayada
UNION
select invoice_id, balance from invoices where invoice_id = yadayadayada
AND invoice_id not in (select invoice_id from pending_payments)
另外,有人指出,在某些系統上,這實際上更快。 我沒有這樣的主張,但是如果速度是一個問題,那就值得嘗試。
另外,如果您需要包括源列(例如,待處理或發票),則可以通過以下方式輕松實現:
select 'pending' as source, invoice_id, balance from pending_payments where invoice_id = yadayadayada
UNION
select 'invoice' as source, invoice_id, balance from invoices where invoice_id = yadayadayada
AND invoice_id not in (select invoice_id from pending_payments)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.