Я пытаюсь переписать некоторые старые SQL-запросы, которые выглядят особенно ужасно. Мне интересно, существует ли более эффективный способ определения приоритетов значений в инструкции where для порядка приоритета. В основном таблица содержит несколько записей электронной почты для каждого пользователя, но я хочу расставить приоритеты на основании того, какие записи предпочтительнее. В этом случае, если email_code - WORK, он должен быть выбран. Но если нет записи WORK, следует выбрать HOME, и так далее. Вот пример того, с чем я работаю. Должен быть более изящный способ сделать это ...?выбор oracle на основе приоритета
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