我有一个具有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手表是您的主要数据来源)