0
Supposons que nous ayons ces quatre tableaux:Comment éviter les sous-requêtes de corrélation à l'intérieur de CASE WHEN?
create table table_x(x number, title varchar2(100));
create table table_y(y number, x number, title varchar2(100));
create table table_z(z number, y number, x number, title varchar2(100));
create table table_main(z number, y number, x number);
Il est obligatoire de chercher title
pour chaque ligne table_main
selon la règle:
select
case
when z is not null
then (select title from table_z where x = tm.x and y = tm.y and z = tm.z)
when y is not null
then (select title from table_y where x = tm.x and y = tm.y)
when x is not null
then (select title from table_x where x = tm.x)
end as title
from table_main tm;
Je suis à la recherche d'une solution plus facile à lire des résultats équivalents.
Existe-t-il un moyen de refactoriser la requête en remplaçant l'instruction case when
par des jointures de table ou d'une autre manière?
Ce sont les sous-requêtes scalaires. Vous pouvez les éviter en utilisant trois jointures à gauche plus une coalesce() – joop
@joop semble avoir eu la même idée ;-) –