【问题标题】:Why left join show the error?为什么左连接显示错误?
【发布时间】:2013-10-03 09:47:59
【问题描述】:

我在下面给出的查询中是否有任何错误。

SELECT * FROM employee Left JOIN bonus;

我已使用 sqlfiddle 在线执行此操作。它显示了一个错误。

并且还面临完全外部连接的问题。

SELECT * FROM   bonus  FULL OUTER JOIN employee ON employee.id=bonus.id;

【问题讨论】:

  • 什么错误给你?
  • 我已经在线执行了这个查询。在 W3 学校它工作正常。但它 sqlfiddle 它显示“您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '' 附近使用正确的语法:从员工员工左加入奖金中选择 *”

标签: mysql left-join outer-join


【解决方案1】:

在使用 LEFT 或 RIGHT 连接时,您必须指定连接列。您的 Employee 和 Bonus 表是如何关联的?例如,如果两个表都包含“EmployeeId”列,那么您将执行以下操作:

SELECT * FROM employee LEFT JOIN bonus ON employee.EmployeeId = bonus.EmployeeId

【讨论】:

  • 加入表格时,匹配表格是可选的。
  • 啊 - 我没有注意到 mysql 标签。在 MS SQL Server 上,使用不带 ON 子句的 LEFT JOIN 会出错。
  • 有时会发生 :)
  • 其实你错了。根据文档,在指定 LEFT 或 RIGHT 时,同样在 MySQL 中,您必须指定 ON 或 USING 子句,因此我希望您收回您的反对票 :-)
  • join_condition 没有出现在文档中的方括号中,当使用 LEFT 或 RIGHT 时,这意味着它不是可选的。
【解决方案2】:

如果你不使用ON,所有的连接都会自动变成CROSS JOIN。你可以试试CROSS JOIN。这是 mysql 文档:http://dev.mysql.com/doc/refman/5.5/en/join.html

【讨论】:

  • 这在使用 LEFT 或 RIGHT 时不成立。在这种情况下,你必须指定一个 ON 或 USING 子句,否则你会得到一个错误 - 在 MySQL 上也是如此(我刚刚使用 sqlfiddle 对其进行了测试:sqlfiddle.com/#!2/a2581/14559
  • @dan 使用 on 子句是内连接和外连接的强制要求。如果不使用,它将作为交叉连接。我的理解正确吗?
【解决方案3】:

根据文档:http://dev.mysql.com/doc/refman/5.5/en/join.html

join_table:
    table_reference [INNER | CROSS] JOIN table_factor [join_condition]
  | table_reference STRAIGHT_JOIN table_factor
  | table_reference STRAIGHT_JOIN table_factor ON conditional_expr
  | table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_condition
  | table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor

在 MySQL 中,on 对于连接是可选的,但对于左外连接或右外连接不是。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-14
    • 2023-03-05
    • 1970-01-01
    • 2016-09-06
    • 2022-06-13
    • 2012-01-03
    • 2011-02-09
    • 2014-11-14
    相关资源
    最近更新 更多