簡體   English   中英

如何有條件地從兩個表之一中選擇一個字段?

[英]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_idpending_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.

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