Bonjour,

Envoyé par
pluche52
Voici ma requête pour renvoyer tout, y compris les objets n'apparaissant pas dans un catalogue:
1 2 3 4 5 6 7 8
| SELECT
Objet.libelle,
Catalogue.libelle,
Page.numero
FROM Objet
LEFT JOIN Objet_catalogue ON Objet.id=Objet_catalogue.objet_id
LEFT JOIN Catalogue ON Objet_catalogue.catalogue_id=Catalogue.id
LEFT JOIN Page ON Page.catalogue_id=Catalogue.id |
En lisant la requête je n'arrive pas au même objectif que celui annoncé.
Objet -> Objet_Catalogue -> Catalogue -> Page
=> lister tous les objets ayant ou non des correspondances avec les tables listées et ce à un niveau quelconque.
alors que la demande est : renvoyer tout, y compris les objets n'apparaissant pas dans un catalogue
Objet -> (Objet_Catalogue -Catalogue - Page)
Note : les outer join sont plus couteux que les join et imposent le chemin de résolution.
Ça c'est pour la remarque de fond.
Pour répondre à la question :
En s'appuyant sur l'exemple de donnée figurant sur le papier, la table Page a été alimentée comme suit :
1 2 3 4
| insert into Page(id,numero,catalogue_id) values
(1,'230';1)
,(2,'YV',2)
,(3,'124',1); |
donc
select * from Page where catalogue_id in(1,2) ;
renvoie bien 3 lignes
il est donc normal que
JOIN Page ON Page.catalogue_id=Catalogue.id
renvoie les 3 valeurs
Partager