0

我最近试图提取一些结果,并且正在努力找出正确的查询来做到这一点。我见过的所有例子,甚至我的 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这两种说法有什么区别?什么时候应该使用每个?怎么做

你确定连接是如何工作的?

4

2 回答 2

0

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

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

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

mysql 选择语句

于 2012-04-05T08:10:31.620 回答
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 

注意:默认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)
于 2012-04-05T08:33:31.170 回答