J'essaie de réécrire certaines anciennes requêtes SQL qui semblent particulièrement horribles. Je me demande s'il existe un moyen plus efficace de hiérarchiser les valeurs dans une instruction where pour l'ordre de priorité. Fondamentalement, la table contient plusieurs enregistrements email_code par utilisateur, mais je veux établir des priorités en fonction des enregistrements préférés. Dans ce cas, si le email_code est WORK, il doit être sélectionné. Mais s'il n'y a pas d'enregistrement WORK, HOME doit être sélectionné, et ainsi de suite. Voici un exemple de ce que je travaille avec. Il doit y avoir une façon plus gracieuse de le faire ...?Sélection Oracle basée sur la priorité
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');
Parlez-vous de COALESCE? https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions023.htm – Danilo
Je ne pense pas que COALESCE fonctionne dans cette situation. Dans certains cas, un enregistrement peut avoir tous les 4 de ces codes. C'est plus sur l'ordre de préséance. – oljones