SQL错误:无法绑定多部分标识符“tableName.ColumnName”

时间:2009-08-11 16:14:31

标签: sql sql-server tsql

当SQL查询中有LEFT JOINing个表时,有时我需要在ON子句中引用多个表。例如:

SELECT p.Name, j.Job, s.Salary
FROM PeopleTable p, JobTable j
LEFT JOIN SalaryTable s ON s.PeopleID=p.PeopleID AND s.JobID=j.JobID

但是,上面会出现这个错误:

SQL Error: The multi-part identifier "p.PeopleID" could not be bound.

似乎ON语句中的LEFT JOIN子句只能“看到”FROM列表中列出的最后一个表。这是真的?任何解决方法?

4 个答案:

答案 0 :(得分:7)

您不能将SQL-89 Join语法“table,table”与SQL-92 Join语法“table LEFT JOIN table ON condition”混合使用

答案 1 :(得分:3)

虽然交叉连接语法是您提供的内容的直接翻译,但它可能不适合您的情况。在离开加入之前,它会将所有人与所有工作联系起来 工资表。这似乎不太可能是你想要的。

你真的有任何与薪水无关的人吗?那么你想看到任何与工资或人无关的工作吗?样本数据和结果集将帮助我们为您提供满足您真正需要的查询。我怀疑以下其中一项可能会给你更好的结果:

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

答案 2 :(得分:0)

尝试

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

答案 3 :(得分:0)

我不是什么意思,但是从FROM PeopleTable p,JobTable j可以用CROSS JOIN替换

SELECT p.Name, j.Job, s.Salary
FROM PeopleTable p
  CROSS JOIN JobTable j
  LEFT JOIN SalaryTable s ON s.PeopleID=p.PeopleID AND s.JobID=j.JobID

Best Regrads, 约尔丹