У меня есть две таблицы, которые определяют детали игры: таблицу с играми и таблицу с ходами.Подсчитывать в совокупном подзапросе или присоединяться
я могу сказать, кто превратить это по
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
Пожалуйста, помните, что * auto_increment * только гарантированно быть уникальным в таблице , Для них не гарантируется последовательное упорядочение и повторное использование. Это особенно актуально, если вам приходится иметь дело с откатами по транзакционным таблицам: http://sqlfiddle.com/#!2/2d39c/1. Не упоминание параллельных вставок в вашей БД. –