8
votes

Erreur SQL: l'identifiant multipartite "Nom_ColumnName" n'a pas pu être lié

Lorsque Roué par gauche Tableaux dans une requête SQL, parfois, je dois faire référence à plusieurs tables dans la clause sur . Par exemple: xxx

Cependant, ce qui précède donnerait à cette erreur:

Erreur SQL: l'identifiant multi-pièces "p.peopleid" n'a pas pu être lié.

Il semble que le sur la clause dans un rejoindre instruction peut uniquement "voir" le dernier tableau répertorié dans le à partir de liste. Est-ce vrai? Toute solution de contournement?


4 Réponses :


0
votes

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


0 commentaires

0
votes

Je ne suis pas shree Pourquoi si si, à partir de peuplatirable p, JobTable J peut être remplacé par une jointure croisée xxx

meilleur regrads, Iordan


1 commentaires

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.



7
votes

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"


5 commentaires

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!



3
votes

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


1 commentaires

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.