我試圖重寫一些看起來特別糟糕的舊SQL查詢。我想知道是否有一種更有效的方法來優先排序where語句中的值的優先順序。基本上這個表格包含了每個用戶的多個email_code記錄,但是我想根據哪些記錄是首選的優先順序。在這種情況下,如果email_code是WORK,它應該被選中。但是,如果沒有工作記錄,則應選擇HOME,依此類推。這是我正在使用的一個例子。必須有一個更優雅的方式來做到這一點......?基於優先級的oracle select
select
*
from
email m
where
status_ind='A'
and decode(email_code, 'WORK',1,
'HOME',2,
'ALT1',3,
'ALT2',4,5) = (select
min(decode(email_code, 'WORK',1,
'HOME',2,
'ALT1',3,
'ALT2',4,5))
from
email
where
email_uid = m.email_uid
and status_ind='A');
你指的是COALESCE嗎? https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions023.htm – Danilo
我不認爲COALESCE在這種情況下工作。在某些情況下,記錄可能包含全部4個這樣的代碼。它更多關於優先順序。 – oljones