J'ai récemment découvert que la clause d'une jointure gauche peut contenir des valeurs telles que (1 = 1).
Cela me bouleverse, car il brise ma perception de la fonction de jointure. P>
J'ai rencontré une version plus élaborée de la situation suivante: p> C'est parfaitement légal. Qu'est-ce que "manager.id = -1" accomplit, si quelque chose? Comment cela peut-il effectuer la jointure? P> p>
3 Réponses :
Sauf si une ligne dans la table du gestionnaire où l'ID est égal à -1, il ne fait rien du tout. S'il y a une telle ligne, cette rangée sera toujours jointe à chaque rangée de la table de la personne. Donc, pour chaque rangée de la personne, vous recevriez potentiellement deux ROS dans la sortie de requête, une avec manager.id = à l'ID des personnes, et une autre avec le gestionnaire.Id = -1 rangée p>
Plus simple que ce que j'avais imaginé. Merci.
Si la table de la personne est la suivante: si la table du gestionnaire est p> si la requête est la suivante: p> Person One -1 Admin
Person Two -1 Admin
Person Two 2 Manager One
Person Three -1 Admin
Person Three 3 Manager Two
Person Four -1 Admin
Person Five -1 Admin
"personne quatre" manquante gaspillée mes 5 minutes :)
Vous verrez également la clause et la clause utilisée pour filtrer davantage les enregistrements. Ceci est extrêmement important dans la gestion des jointures extérieures, comme l'ajout de ces actions de filtrage à la clause où la clause allumera la jointure d'une jointure gauche à une jointure intérieure (sauf si c'est quelque chose comme si T.Idfield est null).
ci-dessous je montre Comment cela fonctionne et pourquoi il est important de placer les clauses de filtrage au bon endroit. p>
Créer une table #TEST (Test1ID Int, Test Varchar (10)) Créer une table # Test2 (Test2ID Int, Test1Id int, Test2 Varchar (10)) P>
select * from #test t left join #test2 t2 on t.test1id = t2.test1id where test2id is null --result set --test1id test test2id test1id test2 --3 Nathan NULL NULL NULL
Je suis venu sur cette page avec la même question. Vous mentionnez que l'expression sur une constante est "parfaitement légale". Comment avez-vous déterminé cela? Êtes-vous en train de dire que c'est "légal" (sanctionné par une spécification) ou qu'il arrive tout simplement travail i> dans une mise en œuvre donnée?