MySQL连接 - ON子句的放置

时间:2012-04-05 07:54:34

标签: 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.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 个答案:

答案 0 :(得分:0)

第一个语句不起作用,因为你在第一次连接table_2两次时有一些名字而没有条件。 mysql中的左外连接完全等效于左连接。 最终第一个陈述完全错误。

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

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

mysql select statement

答案 1 :(得分:0)

您必须阅读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 

注意: 默认加入 INNER JOIN 或者你可以使用以下语法

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