У меня есть две таблицы, к которым я присоединяюсь, и я хотел бы исключить любой результат с числом больше 1 для значения во второй таблице.
Для этого примера у меня есть таблица с именемmovie_info
, который содержит информацию о фильмах, каждый из которых имеет уникальный идентификатор.Вторая таблица с именем crew_info
содержит информацию о съемочной группе каждого фильма (с уникальным идентификатором фильма), но вместо 1 записи на фильм, существует несколько записей для каждого члена экипажа.Визуально это будет выглядеть так:
+----------------------+
| movie_info |
+======================+
| id = '123' |
+----------------------+
+----------------------+
| crew_info |
+======================+
| id = '123' |
+----------------------+
| name = 'John' |
+----------------------+
| role = 'director' |
+----------------------+
+----------------------+
| crew_info |
+======================+
| id = '123' |
+----------------------+
| name = 'Mary' |
+----------------------+
| role = 'director' |
+----------------------+
+----------------------+
| crew_info |
+======================+
| id = '123' |
+----------------------+
| name = 'Sue' |
+----------------------+
| role = 'writer' |
+----------------------+
Я соединяю две таблицы примерно так:
SELECT a.id, b.*
FROM movie_info as a
LEFT JOIN crew_info as b
on a.id = b.id
Пока это все стандартно.Однако я пытаюсь сделать так: only возвращает результаты, в которых crew_info
имеет счет только 1 директор.Таким образом, отдельный запрос, подобный следующему:
SELECT id
FROM crew_info
WHERE role = 'director'
HAVING count(id) = 1
успешно исключает результаты, подобные этому примеру, где имеется более 1 директора.Но как именно я могу объединить это с таблицей movie_info
, чтобы все это было в одном запросе?
Извините, если это неясно.Я относительно новичок в SQL, поэтому, пожалуйста, дайте мне знать, если есть что-то, что я не выразил правильно.Спасибо.
РЕДАКТИРОВАТЬ: Еще одна вещь, о которой я забыл, извините!Если счетчик на больше 1, как мне по-прежнему включать результаты, если сопоставляется другое значение?Допустим, у movie_info
также было поле с именем sequel_id
, которое заполняется только в том случае, если фильм является продолжением.Я хочу исключить результаты с числом директоров> 1 И пустым или нулевым sequel_id
, но включать результаты с числом директоров> 1 И действительным sequel_id
значение.Я пробовал что-то вроде (HAVING COUNT(*) = 1 OR (HAVING COUNT(*) > 1 AND sequel_id IS NOT NULL))
, но я получаю синтаксическую ошибку.