【发布时间】:2013-08-04 14:59:12
【问题描述】:
我有两个定义游戏细节的表格:一个包含游戏的表格和一个包含移动的表格。
我可以通过
判断轮到谁了SELECT (COUNT(idx) %2) FROM history WHERE gameID=x
result=1 为白色,result=0 为黑色。
现在我想选择一个特定系列的游戏,这是我的行动。
不知道我在游戏中是白人还是黑人。
所以现在我对游戏使用另一个查询:
SELECT g.gameID
FROM games AS g
WHERE (g.whitePlayer = 2 or (g.blackPlayer = 2)
然后我使用游戏 ID 来查看是否是我的举动。如果没有,那我就跳过那场比赛。
我想将这两者结合起来,我尝试制作一个聚合子集但由于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
有人知道如何解决这个问题吗?
【问题讨论】:
-
请记住 auto_increment 只保证在表中是唯一的。不能保证它们是按顺序排序的,也不能保证从不重复使用。如果您必须处理事务表上的回滚,则尤其如此:sqlfiddle.com/#!2/2d39c/1。没有提到你的数据库中的并发插入。
标签: mysql join subquery aggregate-functions