2014-02-12 73 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' 

更新,你不应该在用户名使用的限制,试着上面的查询。