mysql - LEFT JOIN 在 "FROM"部分的多个表上

标签 mysql left-join multiple-columns

我无法在 stackoverflow 上找到确切的示例,所以这是我的问题。在 MySQL 4.x 中它工作正常,但 5.x 似乎不喜欢以下内容:

SELECT some stuff..    
FROM schools, member , applications
LEFT JOIN courses ON courses.id = applications.course_id 
LEFT JOIN staff ON staff.id=member.staff_id

此部分抛出一个错误,指出“‘on 子句’中的未知列‘member.staff_id’”。我如何更改它以使 5.x 不会提示?

编辑:我确实注意到,当使用“ONE”LEFT JOIN 时,表名在 FROM 部分中的位置确实很重要,即它必须在末尾。不确定这与问题有什么关系。这只是 5.x 的问题

最佳答案

根据MySQL官方doco,join运算符的优先级高于,(逗号)运算符。这将导致您的 joins 在没有 member 表的情况下进行评估,这意味着 memberjoin 中不可用。但是,因为 applications 表是逗号分隔表系列中的最后一个,所以它可用于连接。 MySQL 有效地看到这样的表:(schools, member, (applications left join courses ...))

13.2.8.2 JOIN Syntax

However, the precedence of the comma operator is less than of INNER JOIN, CROSS JOIN, LEFT JOIN, and so on. If you mix comma joins with the other join types when there is a join condition, an error of the form Unknown column 'col_name' in 'on clause' may occur.

你现在遇到这个错误的原因是(来自同一个链接)

Previously, the comma operator (,) and JOIN both had the same precedence.

为了绕过这种操作顺序限制,您可以仅使用显式连接语法重写查询,或者您可以通过用括号将逗号分隔的表括起来来强制对它们进行分组,这将使 MySQL 看到您的表更像这个 ( (schools, member, applications) left join courses ... )

SELECT some stuff..    
FROM (schools, member , applications)
LEFT JOIN courses ON courses.id = applications.course_id 
LEFT JOIN staff ON staff.id=member.staff_id

但我仍然建议使用显式连接语法。

select some stuff..
  from schools
    join member
    join applications
    left join courses on courses.id = applications.course_id
    left join staff on staff.id = member.staff_id

关于mysql - LEFT JOIN 在 "FROM"部分的多个表上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29861857/

相关文章:

mysql - Jenkins 的复杂 SQL 查询

php - MySQL:在带有@rownum 的php 函数中左联接?

sql - 加入 PostgreSQL 时重复计数

html - html 链接中的列

css - jQuery-ui 选项卡 CSS 无法正常运行

php - mysqli_fetch_array while 循环列

mysql - 其中条件 ActiveRecord Rails 3.1

php - 如何在 codeigniter 中编写全文搜索

php - 使用php和mysql登录表单

MySQL 问题 : LEFT JOIN on empty table