我有以下三个表:

奖牌类型

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。

09-25 18:24
查看更多