【问题标题】:MySQL Joins - Placement of the ON clauseMySQL 连接 - ON 子句的放置
【发布时间】:2012-04-18 23:04:46
【问题描述】:

我最近尝试提取一些结果,并且正在努力找出正确的查询来完成它。我见过的所有例子,甚至我的 MySQL 书都显示如下:

SELECT * 
FROM table_1
LEFT JOIN table_2 LEFT OUTER JOIN table_3 LEFT JOIN table_2
ON table_1.id = table_2.rel_id
AND table_1.id = table_3.rel_id
AND table_3.id = table_2.rel_id
WHERE table_1.some_col = some_vale;

这不起作用,相反,解决方案是:

SELECT *
FROM table_1
LEFT JOIN table_2 ON table_1.id = table_2.rel_id
LEFT OUTER JOIN table_3 ON table_1.id = table_3.rel_id
LEFT JOIN table_2 ON table_3.id = table_2.rel_id
WHERE table_1.some_col = some_value;

这两个SELECT 语句有什么区别?什么时候应该使用每个?怎么办

您确定连接的工作方式?

【问题讨论】:

  • 你确定这有效吗?当我运行这样的代码时,我得到:“ERROR 1066 (42000): Not unique table/alias: 'table_2'” for mysql Ver 14.14 Distrib 5.1.61, for debian-linux-gnu (x86_64) using readline 6.2
  • 不同的是第一次查询有语法错误。第二个几乎是正确的;只需添加表别名,有两个table_2
  • 其他人怎么说。 ON 与连接一起使用。您可以在 ON 部分有多个条件,但不能真正用于连接多个表。

标签: mysql join left-join outer-join


【解决方案1】:

第一个语句不起作用,因为您在第一次使用某个名称且没有条件的情况下加入了 table_2 两次。 mysql中的左外连接是完全等价的左连接。 最终第一个陈述完全不正确。

连接表时,必须使用“ON”子句或在WHERE子句中描述连接条件。 如果您将一张表连接两次,则必须为其添加别名,例如“left join table_2 as t2 left join table_2 as t22”。

无论如何文档都会帮助你:)

mysql select statement

【讨论】:

    【解决方案2】:

    你必须阅读MYSQL JOIN Syntax

    基本语法

         SELECT * FROM first_table ft  
         (LEFT | RIGHT )JOIN second_table st ON st.column = ft.column
         (LEFT | RIGHT )JOIN third_table tt ON tt.column = ft.column (OR st.column)
         WHERE 
    

    注意:默认JOININNER JOIN 或者,您可以使用以下语法

    SELECT * FROM t1 LEFT JOIN (t2, t3, t4)
                     ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)
    

    【讨论】:

      猜你喜欢
      • 2011-09-16
      • 1970-01-01
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多