Comment les valeurs des constantes d'effet de la clause de Jointures?
J'ai découvert récemment que la clause de JOINTURE GAUCHE peut contenir des valeurs telles que (1 = 1).
C'est bouleversant pour moi, comme il se casse ma perception de la façon dont se joint à la fonction.
J'ai rencontré une version plus élaborée de la situation suivante:
SELECT DISTINCT Person.ID, ...
FROM Person LEFT JOIN Manager
ON (Manager.ID = Person.ID OR Manager.ID = -1))
WHERE (...)
C'est parfaitement légal. Ce n' "Gestionnaire.ID = -1" accomplir, si quoi que ce soit? Comment cela peut-il l'effet de la Rejoindre?
OriginalL'auteur Jude Allred | 2009-10-07
Vous devez vous connecter pour publier un commentaire.
Si la personne de table est:
Si le gestionnaire de table est
si la requête est:
Alors le résultat est:
Ici toutes les personne les lignes de jointures avec les -1 Admin (dans le gestionnaire de table) ET si le même id existent dans la table des gestionnaires d'un plus jointure se produit.
OriginalL'auteur JCasso
Sauf si il y a une ligne dans la table des gestionnaires d'où l'id est égal à -1, il ne fait rien du tout. Si il ya une telle ligne, alors que la ligne sera toujours joint à chaque ligne dans la table personne. Donc, pour chaque Personne en ligne, vous serait éventuellement d'obtenir deux des ros dans la sortie de la requête, l'un avec le gestionnaire.id = pour les personnes' id, et un autre avec le Gestionnaire.ID = -1 ligne
OriginalL'auteur Charles Bretana
Vous verrez également le ET la clause utilisée pour filtrer les enregistrements. Cela est extrêmement important dans les relations avec les jointures externes que l'ajout de ces actions de filtrage à la où caluse va tourner le rejoindre de gauche se joignent à une jointure interne (sauf si c'est quelque chose comme t.idfield est null).
Ci-dessous, je montre comment cela fonctionne et pourquoi est-il important de mettre le filtrage clasues dans le bon endroit.
create table #test ( test1id int, test de type varchar (10))
create table #test2 ( test2id int, test1id int, test2 varchar (10))
Vous pouvez utiliser lorsqu'un champ est null (en supposant que vous choisissez un domaine qui ne sera jamais nulle) pour saisir les enregistrements de la première table, mais pas le second comme suit:
OriginalL'auteur HLGEM