MySQL连接-ON子句的位置
我最近试着提取一些结果,并努力找出正确的查询来完成它。我看到的所有示例,甚至我的MySQL书籍都显示了如下连接: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
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部件中具有多个条件,但实际上不适用于连接多个表。