2015-09-02 3 views
0

У меня есть данные в соответствии с приведенной ниже таблицей, я перехожу в список чисел и нуждаюсь в raceId, где все цифры отображаются в столбце данных для этой расы.SQL Select и Group By:

+-----+--------+------+ 
| Id | raceId | data | 
+-----+--------+------+ 
| 14 |  1 | 1 | 
| 12 |  1 | 2 | 
| 13 |  1 | 3 | 
| 16 |  1 | 8 | 
| 47 |  2 | 1 | 
| 43 |  2 | 2 | 
| 46 |  2 | 6 | 
| 40 |  2 | 7 | 
| 42 |  2 | 8 | 
| 68 |  3 | 3 | 
| 69 |  3 | 6 | 
| 65 |  3 | 7 | 
| 90 |  4 | 1 | 
| 89 |  4 | 2 | 
| 95 |  4 | 6 | 
| 92 |  4 | 7 | 
| 93 |  4 | 8 | 
| 114 |  5 | 1 | 
| 116 |  5 | 2 | 
| 117 |  5 | 3 | 
| 118 |  5 | 8 | 
| 138 |  6 | 2 | 
| 139 |  6 | 6 | 
| 140 |  6 | 7 | 
| 137 |  6 | 8 | 
+-----+--------+------+ 

Пример перехожу в 1,2,7 я хотел бы получить следующие идентификаторы:

2 and 4 

Я попытался простое утверждение

SELECT * FROM таблицы WHERE ((данные = 1) или (данные = 2) или (данные = 7))

Но я действительно не понимаю предложение группировки или действительно, если это правильный способ сделать это.

+1

Что вы хотите сказать? Что вы уже пробовали? – mustaccio

+0

Где ваш код! что вы уже пробовали? – Marusyk

+0

, как вы проходите список? –

ответ

1
select raceId 
from yourtable 
where data in (1,2,7) 
group by raceId 
having count(raceId) = 3 /* length(1,2,7) */ 

Это предполагает raceId, пара данных является уникальным. Если это не то, что вы должны использовать

select raceId 
from (select distinct raceId, data 
     from yourtable 
     where data in(1,2,7)) 
group by raceId 
having count(raceId) = 3 
0
SELECT DISTINCT raceId WHERE data IN (1, 2, 7) 
+1

Это не даст результатов, которые запросили ОП. IN вернет все идентификаторы raceID, где данные соответствуют любому из элементов в списке, а не ВСЕ, как указано. – rwking

+0

ahh - Я пропустил этот момент - возможно, слишком быстро прочитал вопрос и принял его. –

0

Это пример запроса «set-in-sets». Мне нравится их решать с group by и having.

select raceid 
from races 
where data in (1, 2, 7) 
group by raceid 
having count(*) = 3; 
+0

Спасибо, Гордон выглядит так, как будто мне нужно. Я действительно не понимаю, есть ли счетный бит - я предполагаю, что он связывает число «чисел» внутри запроса? –

+0

@SteveH. , , Это гарантирует, что есть три матча. –