如何在视图中获取特定值?

时间:2015-07-18 18:23:25

标签: mysql sql database

我有一个关于玩家的id,​​名称等的桌面玩家。我还有一个看起来像

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

我知道这很愚蠢,我没有创造这个,但是当shortname等于FOTOCASH时我必须得分。使用

可以轻松完成

SELECT players FROM players_achievements WHERE playerid = id AND 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`))

2 个答案:

答案 0 :(得分:0)

我猜你没有剩下的查询,但使用

有什么问题
WHERE Fotocash IS NOT NULL

(如果可以的话,坚持LEFT JOIN,它通常会让事情变得更容易......假设LEFT手表是您主要的数据来源)

答案 1 :(得分:0)

我想你想要left join这样:

SELECT p.*, COALESCE(CONCAT(pa.score, '$'), 'NO') as FotoCashScore
FROM players p LEFT JOIN
     players_achievements pa
     ON pa.playerid = p.id AND pa.shortname = 'FOTOCASH';