214 votes

Comment un LEFT OUTER JOIN peut-il renvoyer plus d'enregistrements qu'il n'en existe dans la table de gauche?

J'ai un très de base JOINTURE EXTERNE GAUCHE pour retourner tous les résultats de la table de gauche et quelques informations supplémentaires à partir d'une grande table. La table de gauche contient 4935 enregistrements, mais lorsque j'ai JOINTURE EXTERNE GAUCHE à une table supplémentaire le nombre d'enregistrements est significatnly plus.

Pour autant que je suis conscient qu'il est absolument évangile qu'une JOINTURE EXTERNE GAUCHE sera de retour tous les enregistrements de la table de gauche avec les enregistrements correspondants de la table de droite et des valeurs null pour toutes les lignes qui ne peuvent être mis en correspondance, en tant que tel il me fait comprendre qu'il devrait être impossible de retourner plus de lignes que exister dans la table de gauche, mais il arrive tout de même!

La Requête SQL suivante:

SELECT     SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID
FROM         SUSP.Susp_Visits LEFT OUTER JOIN
                      DATA.Dim_Member ON SUSP.Susp_Visits.MemID = DATA.Dim_Member.MembershipNum

J'ai peut-être fait une erreur dans la syntaxe ou ma compréhension de la JOINTURE EXTERNE GAUCHE est incomplète, quelle que soit la raison pour laquelle je suis en train de devenir fou ici, j'espère que quelqu'un peut expliquer comment cela pourrait être présentes?

Postscript

Merci pour le grea réponses, ma compréhension de JOINTURES EXTERNES gauches est maintenant beaucoup mieux, quelqu'un pourrait-il cependant suggérer une voie à cette requête pourrait être modifiée de manière que je ne reçois que le nombre d'enregistrements retournés, s'il en existe dans la table de gauche?

Cette requête est purement pour générer un rapport et de le dupliquer correspond simplement à créer de la confusion.

/Postscript

222voto

Robin Day Points 39440

La JOINTURE EXTERNE GAUCHE sera de retour tous les enregistrements de la table de GAUCHE rejoint la table de DROITE, lorsque cela est possible.

Si il y a des similitudes, mais cependant, il sera toujours retourner toutes les lignes qui correspondent, par conséquent, une ligne de GAUCHE qui correspond à deux lignes dans le DROIT sera de retour en deux RANGÉES, tout comme une JOINTURE INTERNE.

EDIT: En réponse à votre edit, je viens d'avoir un nouveau look à votre requête et il semble que vous renvoyez les données de la table de GAUCHE. Donc, si vous voulez seulement les données de la table de GAUCHE, et vous souhaitez uniquement une ligne renvoyée pour chaque ligne dans la table de GAUCHE, vous n'avez pas besoin d'effectuer une JOINTURE à tous et il suffit de SÉLECTIONNER directement à partir de la table de GAUCHE.

154voto

Andrew Lewis Points 3101
 Table1                Table2
_______               _________
1                      2
2                      2
3                      5
4                      6

SELECT Table1.Id, Table2.Id FROM Table1 LEFT OUTER JOIN Table2 ON Table1.Id=Table2.Id
 

Résultats:

 1,null
2,2
2,2
3,null
4,null
 

48voto

HLGEM Points 54641

Ce n'est pas impossible. Le nombre d'enregistrements dans la table de gauche correspond au nombre minimal d'enregistrements renvoyés. Si la table de droite a deux enregistrements correspondant à un enregistrement dans la table de gauche, deux enregistrements seront renvoyés.

9voto

Ken Burkhardt Points 1452

Serait-ce une relation un à plusieurs entre les tables gauche et droite?

8voto

topchef Points 7473

LEFT OUTER JOIN exactement comme INNER JOIN (jointure normale) renverra autant de résultats pour chaque ligne de la table de gauche que de correspondances trouvées dans la table de droite. Par conséquent, vous pouvez avoir beaucoup de résultats - jusqu'à N x M, où N est le nombre de lignes du tableau de gauche et M le nombre de lignes du tableau de droite.

C'est que le nombre minimum de résultats est toujours garanti dans LEFT OUTER JOIN égal à au moins N.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X