我有以下三个表:
奖牌类型
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
用户资料
userid userref
1 MYUSERNAME
2 OTHERUSER
3 OTHERUSERALSO
我想要的是特定用户ID的所有勋章类型的结果,包括获得的次数和仍要获得的次数。就像用户ID 1一样,结果如下:
Medalname - Earned
Medalname2 - Earned
Medalname3 - To be earned
我可以使用左连接获得带有Medaltypes和Medals的列表,但是一旦我加入了(不用查询特定用户ID),用户配置文件就会减少该列表。
该查询应如何显示?
最佳答案
您想使用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。