2013-07-25 78 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