【发布时间】:2013-08-05 23:20:37
【问题描述】:
见http://sqlfiddle.com/#!2/26ee6
SELECT g.gameID, (count(h.idx)%2) as lastmove
FROM games as g
inner join history as h on g.gameID=h.gameID
WHERE (g.whitePlayer=2 or g.blackPlayer=2)
GROUP by g.gameID, g.whitePlayer, g.blackplayer
HAVING (g.blackPlayer=2 AND lastmove=1)
OR (g.whitePlayer=2 AND lastmove=0)
首选结果:
gameID--lastmove - really move - is it player=2 's move ?
256 ---- null --=> white -> player2= white = yes its move => out
414 ---- 1 ----=> black -> player2= white = not
497 ---- 0 --- => white -> player2= white = yes its move => out
498 ---- 1 --- => black -> player2= black = yes its move => out
我正在尝试获取所有游戏
(g.blackPlayer=2 AND lastmove=1) OR (g.whitePlayer=2 AND lastmove=0)
问题在于第 256 场比赛,历史上没有记录。
(count(h.idx)%2) as lastmove returns 0 and that is good
但 gameID 不在 Join 中,因此 gameID=256 完全错过了!
如果我反过来加入,我将无法无错误地实现 COUNT, 无论如何也错过了256场比赛:
SELECT g.gameID
FROM games as g
inner join history as h on g.gameID=h.gameID
WHERE (g.whitePlayer=2 or g.blackPlayer=2)
GROUP by g.gameID, g.whitePlayer, g.blackplayer
HAVING (g.blackPlayer=2 AND ((count(h.idx)%2)=1) -error
OR (g.whitePlayer=2 AND ((count(h.idx)%2)=0) -error
http://sqlfiddle.com/#!2/26ee6
谁能帮助解决这个问题?谢谢。
【问题讨论】:
标签: mysql join if-statement count