我有一个具有ID,名称等有关玩家的牌桌玩家。我也有一张表格players_achievements,看起来像

playerid | shortname | score
----------------------------------
    1    | someName  | someScore
    1    | otherName | otherScore
    1    | FOTOCASH  | integerValue
    2    | someName  | someScore
    2    | otherName | otherScore
    2    | FOTOCASH  | integerValue
   ...


我知道这很愚蠢,我没有创建它,但是当短名称等于FOTOCASH时我必须获得分数。使用它将很容易完成

从players_achievements中选择分数,其中playerid = id和shortname ='FOTOCASH'

但是我必须在某些View中执行此操作,如果返回的值不存在,我想插入“ No”。
所以我试图:

CASE players_achievements.playerid
    WHEN players.id THEN
        CASE players_achievements.shortname
            WHEN 'FOTOCASH' THEN CONCAT(players_achievements.score, ' $')
        END
    ELSE 'No'
END AS 'Fotocash'


但这不能很好地工作。现在我有7行(因为每个玩家在成就表中最多可以有8行),其值为None(无值),其中之一为想要的值Fotocash

playerid | Fotocash | rest of columns
-------------------------------
    1    |   Null   | rest of values
    1    |   Null   | rest of values
    1    |  17500$  | rest of values
    2    |   Null   | rest of values
    2    |   3000$  | rest of values
    2    |   Null   | rest of values
...


我希望这看起来像

playerid | Fotocash | rest of columns
-------------------------------------
    1    |  17500$  | rest of values
    2    |   3000$  | rest of values
...


我使用RIGHT JOIN,但也尝试了INNER和LEFT

RIGHT JOIN `db`.`players_achievements` on((`db`.`players_achievements`.`playerid` = `db`.`players`.`id`))

最佳答案

如果没有其余的查询,我猜是这样,但是使用有什么问题

WHERE Fotocash IS NOT NULL




(如果可以,请与LEFT JOIN保持一致,这通常会使事情变得更容易...假设LEFT手表是您的主要数据来源)

10-06 11:30