当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
列表中列出的最后一个表。这是真的?任何解决方法?
答案 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, 约尔丹