2014-02-12 94 views
0

我在與一個SQL查詢鬥爭,我似乎無法弄清楚,並希望有人可能會幫助我這一點。MYSQL查詢失敗,左加入

我有兩張桌子我想連接在一起。我的第一張表是「成就」表,其中有3個字段:achievementId,AchievementName和ZoneId

我的第二個表是位於我的用戶和此成就表之間的表,它基本上也存儲了3個項目。 UserId,AchievementId和IsChecked。它在這裏指的是一個複選框。

因此,我正在一個頁面上顯示覆選框列表形式的所有成就,所以我想讓那些已經實現的成員顯示在列表中,但是,我試圖獲得的查詢完全失敗,我不知道如何解決它。我嘗試了下面的項目,但當然我失敗了。所以我希望你們能夠幫助我,並調整我的查詢。

我當前的查詢是

Select * from Achievement 
Where Zone = '2' 
LEFT JOIN Achievement_User 
    Where Achievement_User.UserId='2' 
    And Achievement_User.AchievementId = Achievement.AchievementId 

但它偏離軌道失敗。我可能有語法錯誤,但我無法弄清楚。如果有人能幫助我?

編輯我想我解釋了這個錯誤。但左連接僅顯示匹配的連接,但是,我需要成就的完整列表,它類似於40行,它現在僅顯示來自Achievement_User的數據行,其中查詢由@Aquillo提供。我更喜歡沒有由區域2的成果提供的所有40行

+0

您忘記了ON條件。 – Mihai

+0

如果外部表userID = 2,那麼左側連接的目的是什麼? – Dan

+0

@丹,因爲他加入AchievementId,而不是UserId – Aquillo

回答

1

首先,您有兩個WHERE子句,其次是JOIN ON JOIN ON。試試這個:響應於OP的更新

在這種情況下

Select * 
from Achievement 
LEFT JOIN Achievement_User ON Achievement_User.AchievementId = Achievement.AchievementId 
Where Zone = '2' 

更新,你不應該在用戶名使用的限制,試着上面的查詢。