Lorsque Cependant, ce qui précède donnerait à cette erreur: p> Erreur SQL: l'identifiant multi-pièces "p.peopleid" n'a pas pu être lié. p>
blockQuote> Il semble que le Roué par gauche CODE> Tableaux dans une requête SQL, parfois, je dois faire référence à plusieurs tables dans la clause
sur code>. Par exemple:
sur la clause code> dans un code> rejoindre code> instruction peut uniquement "voir" le dernier tableau répertorié dans le
à partir de code > liste. Est-ce vrai? Toute solution de contournement? P> p>
4 Réponses :
Essayez
SELECT p.Name, j.Job, s.Salary FROM SalaryTable s LEFT JOIN PeopleTable p on s.PeopleID = p.PeopleID LEFT JOIN JobTable j ON s.JobID = j.JobID
Je ne suis pas shree Pourquoi si si, à partir de peuplatirable p, JobTable J peut être remplacé par une jointure croisée meilleur regrads,
Iordan p> p>
Ce serait parce qu'il l'avait écrit comme une croix rejoindre déjà dans l'ancienne syntaxe obsolète. Je ne suis pas convaincu ce qu'il a écrit est ce qu'il a vraiment besoin.
Vous ne pouvez pas mélanger la syntaxe de jointure SQL-89 "Tableau, Table" avec la syntaxe de la syntaxe de jointure SQL-92 "Table de jointure à gauche sur la condition" p>
Il semble que vous puissiez les mélanger, mais la commande est importante, essayez: Sélectionnez * à partir de msdb..sysjobsteps s, msdb..sysjobs j joint msdb..syscategories c sur j.Category_id = c.c.category_id où j.job_id = s.job_id
Mais les mélanger à la manière dont Jerschneid veut est évidemment différent!
Je suppose que les jointures extérieures présentent des problèmes irrésolubles au compilateur lorsque vous essayez de résoudre la logique. (La spécificité des conditions de jointure extérieures étant l'une des choses qui sont significativement différentes entre les deux).
En tout état de cause, ce n'est vraiment pas une bonne idée de les mélanger de toute façon.
Certainement deuxième que! Choisissez-en un (de préférence SQL-92) et respectez-le!
Alors que la syntaxe de la connexion croisée est une traduction directe de ce que vous avez fourni, cela peut ne pas être juste pour votre situation. Il serait associé à toutes les personnes à tous les emplois avant de se joindre à la table de salaire. Cela ne semble pas probablement que c'est ce que vous voulez.
Avez-vous vraiment des personnes qui ne sont pas associées à un salaire? D'ici question que vous souhaitez voir des emplois qui ne sont pas associés à un salaire ou à des personnes? Les échantillons de données et de résultats nous aideraient à vous donner une requête qui fait ce que vous avez vraiment besoin. Je soupçonne que l'un des éléments suivants pourrait vous donner de meilleurs résultats: P>
SELECT p.Name, j.Job, s.Salary FROM PeopleTable p JOIN SalaryTable s ON s.PeopleID=p.PeopleID RIGHT JOIN JobTable j ON s.JobID=j.JobID SELECT p.Name, j.Job, s.Salary FROM PeopleTable p JOIN SalaryTable s ON s.PeopleID=p.PeopleID JOIN JobTable j ON s.JobID=j.JobID SELECT p.Name, j.Job, s.Salary FROM SalaryTable s RIGHT JOIN PeopleTable p ON s.PeopleID=p.PeopleID RIGHT JOIN JobTable j ON s.JobID=j.JobID
Je viens de faire ces tables comme exemple. Je rencontre ce type de table, table, litige de jointure de gauche de temps en temps et je me demandais simplement s'il y avait des astuces là-bas que je ne savais pas, autrement que de réorganiser ma requête.
Voir: Stackoverflow.com/Questtions/1080097/...