代码之家  ›  专栏  ›  技术社区  ›  JerSchneid

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

  •  7
  • JerSchneid  · 技术社区  · 15 年前

    什么时候? LEFT JOINing SQL查询中的表,有时我需要引用 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.

    似乎 A中的子句 LEFT JOIN 语句只能“查看”列在 FROM 名单。这是真的吗?有什么解决办法吗?

    4 回复  |  直到 15 年前
        1
  •  7
  •   RBarryYoung    15 年前

    不能将SQL-89联接语法“table,table”与SQL-92联接语法“table left join table on condition”混合使用。

        2
  •  3
  •   HLGEM    15 年前

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

    你真的有没有与薪水无关的人?关于这一点,你想看到任何与薪水或人员无关的工作吗?示例数据和结果集将帮助我们提供一个执行您真正需要的查询。我怀疑以下其中一项可能会给您带来更好的结果:

    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
    
        3
  •  0
  •   Leahn Novash    15 年前

    尝试

    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
    
        4
  •  0
  •   IordanTanev    15 年前

    我不是舒尔,为什么是这样,但是从Peopletable P,JobTable J可以被交叉连接替换。

    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
    

    最好的改革者, 约旦