1

我有两个定义游戏细节的表格:一个包含游戏的表格和一个包含移动的表格。

我知道轮到谁了

SELECT (COUNT(idx) %2) FROM history WHERE gameID=x

结果 = 1 为白色,结果 = 0 为黑色。

现在我想选择一个特定系列的游戏,这是我的举动。

不知道我在游戏中是白人还是黑人。

所以现在我对游戏使用另一个查询:

SELECT g.gameID 
FROM games AS g
WHERE (g.whitePlayer = 2 or (g.blackPlayer = 2)

然后我用gameID来看看是不是我的动作。如果没有,那我就跳过那场比赛。

我想将这两者结合起来,我尝试制作一个聚合子集但由于COUNT()

例如,这不起作用并且不返回任何内容:

SELECT * 
FROM games as g 
WHERE (g.whitePlayer = 2) 
  AND gameID IN (SELECT gameID 
                 FROM history as h 
                 HAVING (COUNT(h.idx) %2) = 1)

或者

SELECT COUNT(h.idx)
FROM history as h
INNER JOIN
    (SELECT gameID
     FROM games 
     WHERE (whitePlayer = 2)) As thesegames ON h.gameID = thesegames.gameID 
HAVING (COUNT(h.idx) %2) = 1

有人知道如何解决这个问题吗?

http://sqlfiddle.com/#!2/425fb

4

2 回答 2

0

尝试这个

 Select count(h.idx) , COUNT(h.idx) %2 
 From history as h
 Inner Join  games g
 On h.gameID = g.gameID 
 WHERE  whitePlayer=2
 HAVING  COUNT(h.idx) %2 = 1
于 2013-08-03T11:11:07.227 回答
0

我还没有完成,但这回答了我自己的问题

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)
GROUP by g.gameID, g.whitePlayer
HAVING (g.whitePlayer=2 AND lastmove=0)
于 2013-08-05T22:51:35.200 回答