2015-02-18 3 views
1

В трех таблиц:найти все ID имеющие все значения из другой таблицы

Actors: 
+------------------+ 
| id_a | actor_name| 
+------------------+ 
| 1 | AAA  | 
| 2 | Bbb  | 
| 3 | Ccc  | 
| 4 | Ddd  | 
| 5 | Eee  | 
+------------------+ 

Movies: 
+----------------+ 
| id_m | mov_name| 
+----------------+ 
| 1 | LoR | 
| 2 | Thron | 
| 3 | ZsT | 
+----------------+ 

actors_in_movies: 
+-------------+ 
| id_m | id_a | 
+-------------+ 
| 1 | 1 | 
| 1 | 3 | 
| 1 | 5 | 
| 2 | 1 | 
| 2 | 3 | 
| 3 | 2 | 
| 3 | 3 | 
| 3 | 4 | 
| 3 | 5 | 
+-------------+ 

можно написать один запрос, чтобы получить: все фильмы, где играют актеры из запроса?

Пример: SELECT id_m ГДЕ id_a В (1,3,4,5), должны дать:

+------+ 
| id_m | 
+------+ 
| 1 | 
| 2 | 
+------+ 

однако .. ВЫБОР id_m WHERE id_a В (1,9) должен дать NULL.

Я попытался подобные запросы: Finding ID having all values (mySQL, SQL), писать что-то вроде:

SELECT id_m, count(*), group_concat(id_a) as all_act 
FROM actors_in_movies 
WHERE 
id_m IN (SELECT id_m FROM actors_in_movies WHERE id_a = 1) 
AND 
id_m IN (SELECT id_m FROM actors_in_movies WHERE id_a = 3) 
AND 
id_m IN (SELECT id_m FROM actors_in_movies WHERE id_a = 5) 
GROUP BY (id_m) 
HAVING count(*) <= 3 

это показывают только один фильм (id_m: 1), , если я использую «OR» это почти нормально, , но это важно для меня чтобы получить все фильмы, где актеры из запроса играют, проголосовали за актеров или меньше, никогда фильмы, у которых есть актеры, пропущенные в запросе. Как это должно быть написано?

+0

Подсказка: Используйте 'JOIN'. –

ответ

0

Использование group by и having:

SELECT id_m 
FROM table 
WHERE id_a IN (1, 9) 
GROUP BY id_m 
HAVING COUNT(DISTINCT id_a) = 2; 
+0

он работает, но если я попробую найти id_a IN '(1, 3, 9, 12, 13, 14)' i не получил результат 'id_m: 2', что вам нужно. Если я изменил 'having' на' <= 6', я получаю все фильмы, у которых есть хотя бы один идентификатор из запроса .. – Jacek

+0

, но мне нужны фильмы, содержащие все идентификаторы из запроса или меньше, если в фильме есть больше актеров, чем указано в запросе, оно должно не быть в результатах – Jacek

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