Pas de solution avec INTERSECT ou MINUS
Bonjour à tous,
Voilà mon problème simplifié : j'ai une table contenant une liste de valeurs possibles (TA) et une autre table contenant une restriction de cette liste de valeurs (TB).
Je souhaite créer une vue me permettant de répondre aux 2 cas suivant
1) Dans le cas où TB est vide, je souhaite récupérer toutes des valeurs de TA.
2) Dans le cas où TB n'est pas vide, je ne souhaite récupérer que les valeurs identifiées dans TB par une jointure sur TA.
Code:
1 2 3 4 5 6 7 8
| Create table TA (code number(10), valeur varchar2(10));
insert into TA values (1,'A');
insert into TA values (2,'B');
insert into TA values (3,'C');
insert into TA values (4,'D');
insert into TA values (5,'E');
Create table TB (code number(10)); |
MINUS ne retourne aucune ligne si TB n'est pas alimentée avec l'ordre
Code:
1 2 3 4 5 6
| select ta.code, ta.valeur
from ta
minus
select ta.code, ta.valeur
from ta
where ta.code not in (select tb.code from tb); |
MINUS fonctionne si TB contient un enregistrement.
Fonctionnement identique avec INTERSECT.
Ma solution actuelle est de faire une vue basée sur un select de ta et tb avec un outer join, de faire un count sur le nb de colonne tb.code renseignées. Si ce nombre est positif, je reprends les valeurs avec tb.code non null sinon je reprends toutes les lignes.
Si quelqu'un a une autre solution, je suis preneur.
Merci.