[Oracle] problème de nvl
Résolu
AssassinTourist
Messages postés
6029
Date d'inscription
Statut
Contributeur
Dernière intervention
-
AssassinTourist Messages postés 6029 Date d'inscription Statut Contributeur Dernière intervention -
AssassinTourist Messages postés 6029 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous !
J'ai un problème concernant la requête NVL sous Oracle. Le truc, c'est que j'ai un id, mais qui pourrait être dans deux tables table1 ou table2 et globalement je fais ma requête comme ceci :
Si jamais l'id_donne est dans la table1, il n'y a pas de problème. Si par contre, mon id_donne se trouve dans table2, j'ai ID qui est bon, mais j'ai NOM qui reprend toutes les valeurs qui sont dans table1 !
Alors est-ce impossible en une seule requête ? Ma syntaxe est-elle mauvaise ? Y a-t-il d'autres commandes qui permettent de faire ce que je veux ? Ou bien suis-je obligé de passer par deux requêtes, la première vérifiant dans quelle table se trouve l'id_donne avec un count(*) ?
Merci beaucoup !
J'ai un problème concernant la requête NVL sous Oracle. Le truc, c'est que j'ai un id, mais qui pourrait être dans deux tables table1 ou table2 et globalement je fais ma requête comme ceci :
select distinct nvl(t1.id, t2.id) ID, nvl(t1.nom, t2.nom) NOM from table1 t1, table2 t2 where (t1.id = id_donne or t2.id = id_donne)
Si jamais l'id_donne est dans la table1, il n'y a pas de problème. Si par contre, mon id_donne se trouve dans table2, j'ai ID qui est bon, mais j'ai NOM qui reprend toutes les valeurs qui sont dans table1 !
Alors est-ce impossible en une seule requête ? Ma syntaxe est-elle mauvaise ? Y a-t-il d'autres commandes qui permettent de faire ce que je veux ? Ou bien suis-je obligé de passer par deux requêtes, la première vérifiant dans quelle table se trouve l'id_donne avec un count(*) ?
Merci beaucoup !
A voir également:
- Sql nvl
- Logiciel sql - Télécharger - Bases de données
- Requete sql pix - Forum PHP
- Additions et multiplication dans des requêtes SQL ✓ - Forum MySQL
- Sql query download - Télécharger - Gestion de données
- Ora-00933: la commande sql ne se termine pas correctement ✓ - Forum Oracle
Je vais donc tester :
C'est une bonne idée ! Je reviens dire si ça a pu fonctionner dès que je peux.
M'enfin, je ne comprends pas bien alors la fonction NVL :$ et pourquoi elle retourne ces résultats...
NVL est utilisé pour remplacer la valeur d'un champ vide, mais sur un enregistrement existant. Tu sembles l'utiliser sur des champs d'un enregistrement qui n'existerait pas.
En plus sans lien entre les 2 tables ta requête génère un produit cartésien des enregistrements entre table 1 et table 2.
Il y a plusieurs autres façons de faire, pour par exemple supprimer le distinct
select id, nom from table1 where id=id_donne
union
select id, nom from table2 where id=id_donne
and id not in (select id from table1 where id=id_donne )
Mais n'est-il pas mieux de mettre un distinct plutôt que de faire trois select ?
(dans mon cas présent, j'avais mis un distinct parce qu'avec le nvl, il me donnait trop de résultats même lorsque la requête était bonne)