rejoindre jointure interne et externe unir en une seule requête dans oracle
J'essaie de joindre à 7 tables dans une requête select quatre avec inner join et deux avec jointure externe.
Puis-je combiner extérieur et l'intérieur de la rejoindre dans la même requête? Parce que quand je le fais je ne suis pas d'obtenir des résultats corrects. J'ai essayé avec les deux jointures ANSI ( INNER JOIN , LEFT OUTER JOIN) et avec le signe + en tant que bien. Je me demande est de l'ordre de rejoindre est important dans la norme ANSI rejoint?
voici donc le scénario,
une table
tableau b
le tableau c
tableau e
tableau f
tanle g
tableau h
jointure interne ( a , b, c )
jointure interne ( a , e , f)
externe gauche jointure externe ( f , g)
jointure externe gauche ( f , h)
Ma requête ( ce qui est faux) _==>
FROM a inner join b on (a.col_1 = b.col_1)
inner join c on (b.y = c.y)
inner join e on ( a.col_1 = e.col_1)
inner join f on (e.col_4 = f.col_4)
left outer join g on (g.col_5= f.col_5)
left outer join h on (h.col_6 = f.col_6)
Pouvait-on s'il vous plaît aidez-moi avec le bon de rejoindre requête?
Tout le plomb serait très appréciée
Vous devez vous connecter pour publier un commentaire.
Vous pouvez toujours écrire une requête avec
INNER
etOUTER JOIN
ensemble.Votre exemple n'est pas évident, car est très important, lorsque vous écrivez une requête connaît votre objectif.
INNER JOIN
: Vous effectuez cette opération lorsque vous souhaitez extraire des lignes à travers les deux (ou plus) des tables, et pour vous, c'est important la présence de ces valeurs de données dans les deux tableaux.OUTER JOIN
: Vous effectuez cette opération lorsque vous souhaitez extraire les lignes d'une table principale indépendante si la ligne correspondante est présente dans la table liée.J'ai essayer de faire un exemple:
J'ai une table (
PERSON
) avec une liste de personnes. Cette table a une clé étrangère vers le point d'un tableau (COUNTRY
) de connaître des informations sur le lieu de naissance. J'ai une autre table (BANK_ACCOUNT
) où je stocke le compte bancaire pour chaque personne (si une personne a).Mon résultat veut savoir: toutes les informations de personne (inclus le lieu de naissance nom) et si une personne a un compte en banque, il sait.
La requête:
Dans ce cas est très important de connaître le but! Sur un autre but de la partie supérieure de la requête peut être erronée.
Sur l'ordre de
JOIN
: l'important n'Est pas l'ordre, mais le type oui.INNER JOIN
: Est commutatif. Si vous avez des tables A et B si vous écrivezOUTER JOIN
: N'est pas commutative. Si vous avez des tables A et B le suit requêtes sont les différences:Parce que le premier dit: Une des lignes et si il existe une ligne correspondante dans B me donner ces informations, au lieu de retourner la valeur NULL.
La deuxième requête indique: obtenir toutes les lignes B et si il existe une ligne correspondante dans Un de me donner ces informations, au lieu de retourner la valeur NULL.
Certains de vos Jointures internes (="exigences") ne sont probablement pas de retourner quoi que ce soit.
Inner join ne retourne rien à partir de la table source (a) si la "jointure sur -condition" ne peuvent pas être remplis. Left join renvoie des lignes (tableau a) et remplit la rejoint rangée de colonnes avec des valeurs null si non trouvé. Dans les deux cas, si il y a des correspondances multiples, plusieurs lignes sont également retourné.
Exemple avec une ligne de la table:
Et notre requête:
Donc, ne nous renvoie rien?
Déjà à ce stade, la requête ne retourne rien, et nous n'avons pas d'événement devez vérifier gauche rejoint (il n'y a rien à rejoindre).
Si f.col4 aurait été de 6 au lieu de 7, l'exemple de la ligne serait renvoyé. Puis nous avons rejoint aussi la ligne(s) de g si la condition peut être apparié (g.col_5= f.col_5; 4 = 4 -> OK). Dans cet exemple, choisi colonnes de la table h, tous ont de la valeur null, parce que la condition (option 2) n'est pas remplie.
J'espère que cela vous aide à trouver les questions. Il est vraiment difficile de voir le problème réel sans données valides. Dans l'avenir, pensez à utiliser par exemple SQL Violon avec vos questions.
PS. EXTÉRIEUR et INTÉRIEUR sont en option de mots et de ne pas faire de différence dans la requête. Donc JOINTURE EXTERNE GAUCHE est la même que LEFT JOIN et INNER JOIN est la même que REJOINDRE.