0

我对外部连接的世界很陌生,我正在尝试习惯它们,但我不知道为什么 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)
4

5 回答 5

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仅保留子句用于过滤。我认为这会使您的查询具有更好的可读性。

于 2013-07-25T06:10:32.787 回答
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
于 2013-07-25T06:10:41.903 回答
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 相同。

希望这对你有帮助!!!

于 2013-07-25T06:20:23.643 回答
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)

此处输入链接描述

先到FROM table_references先得WHERE where_condition

也可以看看JOIN Syntax

于 2013-07-25T06:10:49.697 回答
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

于 2013-07-25T06:11:21.013 回答