Joindre 3 tables Oracle SQL
J'ai 3 tables de la liste ci-dessous:
Table_A:
order_number | header_id
123 | 80001
Table_B
header_id | line_id | quantity
80001 | 10001 | 1
80001 | 10002 | 3
80001 | 10003 | 5
Table_C
header_id | line_id | hold_price_id | released_flag
80001 | 10001 | 2001 | Y
80001 | 10002 | 2002 | Y
80001 | 10003 | 2003 | N
J'ai écrit une requête, comme illustré ci-dessous:
SELECT A.order_number, A.header_id, B.line_id, B.quantity, C.hold_price_id, C.released_flag
FROM Table_A a,
Table_B b,
Table_C c
WHERE a.header_id = b.header_id
AND c.line_id = b.line_id
AND a.order_number = '123';
Mon désir de sortie est indiquée ci-dessous:
order_number | header_id | line_id | quantity | hold_price_id | released_flag
123 | 80001 | 10001 | 1 | 2001 | Y
123 | 80001 | 10002 | 3 | 2002 | Y
123 | 80001 | 10003 | 5 | 2003 | N
Cependant la requête de me montrer le résultat ci-dessous:
order_number | header_id | line_id | quantity | hold_price_id | released_flag
123 | 80001 | 10001 | 1 | 2001 | Y
123 | 80001 | 10001 | 3 | 2002 | Y
123 | 80001 | 10001 | 5 | 2003 | N
123 | 80001 | 10002 | 1 | 2001 | Y
123 | 80001 | 10002 | 3 | 2002 | Y
123 | 80001 | 10002 | 5 | 2003 | N
123 | 80001 | 10003 | 1 | 2001 | Y
123 | 80001 | 10003 | 3 | 2002 | Y
123 | 80001 | 10003 | 5 | 2003 | N
Est-il quelque chose de mal sur ma requête? S'il vous plaît conseils.
Merci!
- Merci d'éditer votre question et de montrer des exemples de données et les résultats souhaités.
- Au minimum, doivent
AND c.header_id = b.header_id
.
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas rejoint toutes les clés communs, de sorte que vous obtenez Cartésien résultats. Vous avez besoin de joindre un c avec de l'en-tête id, comme
Vous avez besoin d'apprendre à utiliser la bonne explicite
join
de la syntaxe. Une règle simple: ne jamais utiliser de virgules dans lefrom
clause. Toujours utilisation explicitejoin
s:SÉLECTIONNER un.order_number, une.header_id, b.line_id, b.la quantité ,la c.hold_price_id,c.released_flag
DE Table_A une JOINTURE croisée
Table_B b jointure croisée table_C c;
ORDER_NUMBER HEADER_ID LINE_ID QUANTITÉ HOLD_PRICE_ID RELEASED_F
9 lignes sélectionnées.