MySQL连接-ON子句的位置

MySQL连接-ON子句的位置,mysql,join,left-join,outer-join,Mysql,Join,Left Join,Outer Join,我最近试着提取一些结果,并努力找出正确的查询来完成它。我看到的所有示例,甚至我的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.s

我最近试着提取一些结果,并努力找出正确的查询来完成它。我看到的所有示例,甚至我的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
语句之间有什么区别?什么时候使用?怎么办


是否确定联接的工作方式?

第一条语句不起作用,因为第一次使用某个名称和无条件联接表2两次。mysql中的左外连接完全等效于左连接。 最终第一句话完全不正确

在联接表时,必须使用“ON”子句或在WHERE子句中描述联接条件。 如果两次联接一个表,则必须向其添加别名,如“左联接表_2为t2左联接表_2为t22”

无论如何,文档将帮助您:)

你必须阅读

基本语法

     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 
注意:默认的连接内部连接 或者,您可以使用以下语法

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

你确定这样行吗?当我运行这样的代码时,我得到了这样的结果:“错误1066(42000):对于mysql版本14.14发行版5.1.61,不是唯一的表/别名:'table_2'”,对于使用readline 6.2的debian linux gnu(x86_64),区别在于第一个查询有语法错误。第二个几乎是正确的;只需添加表别名,就有两个
table_2
。上的
与连接一起使用。您可以在ON部件中具有多个条件,但实际上不适用于连接多个表。