У меня есть база данных фильмов, одна из таблиц - «категории», которая содержит все жанры, которые может иметь фильм в базе данных.Left Join не возвращает все строки в левой таблице
Запуск следующего запроса:
SELECT category.name FROM category
возвращает строку:
Action
Animation
Children
Classics
Comedy
Documentary
Drama
Family
Foreign
Games
Horror
Music
New
Sci-Fi
Sports
Travel
Я пытаюсь запрос к базе данных, чтобы найти # каждый конкретный жанр конкретного актера играет роль в , но я хочу, чтобы он возвращал ВСЕ жанры с # в следующем столбце. Это был мой первоначальный запрос:
SELECT q1.name AS 'Film Category', COUNT(q2.name) AS '# of Films Ed Chase has appeared in'
FROM (
SELECT category.name FROM category
) AS q1
LEFT JOIN (
SELECT category.name FROM category
INNER JOIN film_category ON film_category.category_id = category.category_id
INNER JOIN film ON film.film_id = film_category.film_id
INNER JOIN film_actor ON film.film_id = film_actor.film_id
INNER JOIN actor ON actor.actor_id = film_actor.actor_id
WHERE actor.first_name = 'ED' AND actor.last_name = 'CHASE'
) AS q2
ON q1.name = q2.name AND '# of Films Ed Chase has starred in' >= 0
GROUP BY q2.name
ORDER BY q2.name;
И это возвращает эту таблицу, пропуская некоторые строки (я хочу, чтобы дать все жанры, а не только один это, что актер играет определенную роль в):
Film Category # of Films Ed Chase has appeared in
Animation 0
Action 2
Classics 2
Documentary 6
Drama 3
Foreign 2
Music 1
New 2
Sci-Fi 1
Sports 2
Travel 1
Интересно, что он возвратил '0' для 'Animation', но нет строк для 'Children' или 'Comedy', которые я искал (все возвращаемые жанры). Что я делаю не так?
Ваше внутреннее соединение делает меня кроссовым, поэтому, вероятно, вы не делаете то, что хотите. Дайте мне несколько минут, чтобы попробовать переписать его. –
Вы абсолютно уверены, что имя актера всегда в верхнем регистре? –
Получил. Смотри ниже. –