我有以下三个表:
Medaltypes
id name description
6 Medalname Right on!
7 Medalname2 Aswsome
8 Medalname3 Allright
奖牌
id medaltype userref
1 6 MYUSERNAME
2 7 MYUSERNAME
3 6 OTHERUSER
4 6 OTHERUSERALSO
的UserProfiles
userid userref
1 MYUSERNAME
2 OTHERUSER
3 OTHERUSERALSO
我想要的是特定用户ID的所有medaltypes的结果,包括所获得的onces和仍然可以获得的onces。与用户ID 1一样,这将是结果:
Medalname - Earned
Medalname2 - Earned
Medalname3 - To be earned
我可以通过左连接获得带有Medaltypes和Medals的列表,但是一旦我加入(更不用说查询特定的用户ID)Userprofiles就会减少列表。
这个查询应该怎么样?
答案 0 :(得分:2)
您想使用LEFT JOIN
,但用户的条件需要包含ON
子句:
select ml.name,
(case when m.id is not null then 'EARNED' else 'TO BE EARNED'
end)
from medaltypes ml left join
medals m
on m.medaltype = ml.id and
m.userref = 'MYUSERNAME';
您的数据结构很尴尬。 Medals
不应包含userref
;它应该包含用户的id。