2013-07-25 77 views
0

我对外连接的世界相当陌生,我试图去适应它们,但我不知道为什么mysql会说这个语法不正确。有没有人关心提供一些见解?为什么mysql说有语法错误?

SELECT * FROM user_courses, course_updates 
     WHERE user_courses.crn = course_updates.crn AND user_courses.user_id = 1 
     LEFT JOIN followers ON (followers.followee = course_updates.user_id) 

回答

3

LEFT JOIN子句应该在WHERE子句之前。

SELECT * FROM user_courses, course_updates 
     LEFT JOIN followers ON (followers.followee = course_updates.user_id) 
     WHERE user_courses.crn = course_updates.crn AND user_courses.user_id = 1 

顺便问一下,你也可以使用`INNER JOIN你其他表,所以你不要有两种类型的语法:

SELECT * FROM user_courses 
     INNER JOIN course_updates on user_courses.crn = course_updates.crn 
     LEFT JOIN followers ON followers.followee = course_updates.user_id 
     WHERE user_courses.user_id = 1 

注意,我省略了周围的括号ON条件,这是完全有效的。另外,您可以看到使用INNER JOIN,您可以在连接本身中指定连接条件,而WHERE子句仅用于筛选。我认为这可以提高查询的可读性。

1

使用这样

SELECT * FROM user_courses, course_updates 
LEFT JOIN followers ON (followers.followee = course_updates.user_id) 
WHERE user_courses.crn = course_updates.crn AND user_courses.user_id = 1 
0

因为有一个语法错误。

尝试

SELECT * 
FROM user_courses LEFT JOIN 
     course_updates ON user_courses.crn = course_updates.crn 
         AND user_courses.user_id = 1 LEFT JOIN 
     followers ON (followers.followee = course_updates.user_id) 

enter link description here

FROM table_references到来之前的WHERE where_condition

而且也许看JOIN Syntax

+0

您实际上通过使用两个左连接更改了查询的行为。 – GolezTrol

+0

这可能是OP的左脚。使它成为INNER JOIN应该足够了。 –

0

试试这个..

SELECT * FROM user_courses INNER JOIN course_updates ON user_courses.crn = course_updates.crn LEFT JOIN followers ON followers.followee = course_updates.user_id WHERE user_courses.user_id = 1 

因为,WHERE子句后JOIN

0

使用是你的语法是错误的,你的情况使用WHERE在声明的结尾条款如下:

SELECT * 
FROM user_courses uc 
     INNER JOIN course_updates cu ON cu.crn = uc.crn 
     LEFT OUTER JOIN followers f ON f.followee = cu.USER_ID 
WHERE uc.USER_ID = 1 

还要确保˚F .followee类型和cu.USER_ID是相同的。

希望这会帮助你!

+0

是的。我后来发现了!谢谢您的帮助! – user2605381