[Oracle] Jointure, avec une clé étrangère pouvant valoir null

Jointure, avec une clé étrangère pouvant valoir null [Oracle] - SQL/NoSQL - Programmation

Marsh Posté le 27-06-2005 à 20:11:00    

Bonjour à tous :hello:
 
Je suis sous Oracle et j'ai une table TA contenant, entre autres, une clé
étrangère (colonne b_id) vers une autre table TB. Lors de
l'affichage des éléments de TA, je veux afficher non pas la clé étrangère
(normal, ce n'est qu'un identifiant numérique) mais le libellé
correspondant dans TB (colonne libelle). Jusque là, rien de bien
compliqué. Le problème se situe lors de l'affichage des enregistrements ayant une clé étrangère valant null. D'où ma requête, que je trouve plutôt crade :/
 

Code :
  1. select distinct TA.a_id, decode(TB.b_id, null, '', TB.libelle)
  2. from TA,TB
  3. where TA.b_id is null or TA.b_id = TB.b_id


 
C'est un peu du bricolage car lorsque la clé étrangère vaut null, Oracle me fait un simple produit cartésien entre les 2 tables :fou:, d'où le decode pour afficher des chaînes vides au lieu de tous les libelle de la table TB, et le distinct pour finalement afficher l'enregistrement voulu.
 
Y'a certainement une méthode plus propre, non ? :heink:

Reply

Marsh Posté le 27-06-2005 à 20:11:00   

Reply

Marsh Posté le 27-06-2005 à 20:59:59    

Code :
  1. select distinct TA.a_id, nvl(TB.libelle, '')
  2. from TA,TB
  3. where TA.b_id = TB.b_id(+)


 
Ca devrait marcher ça.

Reply

Marsh Posté le 27-06-2005 à 21:27:30    

Merci, j'essaie ça demain matin au taff :)

Reply

Marsh Posté le 27-06-2005 à 22:15:55    

(ça s'appelle une jointure externe, au cas où tu chercherais à retrouver la syntaxe pour un autre sgbd, plus tard...)


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 28-06-2005 à 00:59:02    

cela dit, avec le coup des NULL, ça fait un peu bizarre, mais ça devrait passer.

Reply

Marsh Posté le 28-06-2005 à 09:44:04    

Ca marche nickel, merci :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed