查询连接表

时间:2016-10-29 16:28:33

标签: mysql sql

我有以下三个表:

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就会减少列表。

这个查询应该怎么样?

1 个答案:

答案 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。