我有一个关于玩家的id,名称等的桌面玩家。我还有一个看起来像
的表players_achievementsplayerid | 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`))
答案 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';