2016-11-07 3 views
1

У меня есть две таблицы, называемые играми, и gameprogress. Gameprogress имеет столбец state, который описывает прогресс. Игра связана с gameprogress через идентификатор.Проверьте, имеет ли таблица значение конкретной строки

Возможные состояния: 1,3,4 в gameprogress.

Я хочу найти игры без state = 1 и без состояния = 4. Я пытался что-то вроде этого:

select top 10 gp.gameid, count(gp.state) as dup 
from gameprogress gp 
join game g on g.id= gp.gameid 
where g.gamestate != 2 and gp.state != 1 
group by gp.gameid 
having count(gp.state)>1 

ответ

1

Вы можете использовать CASE EXPRESSION в пункте HAVING:

SELECT TOP 10 g.gameid 
FROM game g 
LEFT JOIN gameprogress gp 
ON g.id= gp.gameid 
GROUP BY g.gameid 
HAVING COUNT(CASE WHEN gp.state = 3 THEN 1 END) = COUNT(*) 
+0

Looks как правильный путь. Но у меня проблема в том, что вы не получаете игры с состоянием = 4, я пытался: SELECT g.id FROM game g LEFT JOIN gameprogress gp ON g.id = gp.gameid где g.gamestate! = 2 и gp.state! = 4 GROUP BY g.id HAVING COUNT (CASE WHEN gp.state = 1 THEN 1 END) = 0 – farnholdt

+0

Зачем ему возвращать игры с состоянием = 4? Должен ли я догадываться о данных? Измените вопрос и укажите образец данных! – sagi

+0

Моя вина. Отредактировал вопрос. – farnholdt

Смежные вопросы