我正在尝试从6个表格中生成1个查询,这些表格显示标题,生产年份以及它在所有类别中赢得的奥斯卡总数。我之前尝试加入它们,但是在某些类别中(例如,actor_award,根本没有'Oscar'条目,而在其他表格中,例如crew_award'Oscar'被输入7次)我生成的代码不起作用,但我认为它可以作为我想要实现的伪代码。谁能帮我吗?
SELECT movie.title, movie.production_year, COUNT(actor+crew+movie+writer+director)
WHERE
(SELECT * FROM actor_award WHERE actor_award.title = 'Titanic' AND
(actor_award.result = 'won' or actor_award.result = 'Won')
AND actor_award.award_name = 'Oscar') AS actor AND
(SELECT * FROM crew_award WHERE crew_award.title = 'Titanic' AND
(crew_award.result = 'won' or crew_award.result = 'Won')
AND crew_award.award_name = 'Oscar') AS crew AND
(SELECT * FROM movie_award WHERE movie_award.title = 'Titanic' AND
(movie_award.result = 'won' or movie_award.result = 'Won')
AND movie_award.award_name = 'Oscar') AS movie AND
(SELECT * FROM writer_award WHERE writer_award.title = 'Titanic' AND
(writer_award.result = 'won' or writer_award.result = 'Won')
AND writer_award.award_name = 'Oscar') AS writer AND
(SELECT * FROM director_award WHERE director_award.title = 'Titanic' AND
(director_award.result = 'won' or director_award.result = 'Won')
AND director_award.award_name = 'Oscar') AS director AND
movie.title = 'titanic' AND
movie.production_year = '1997'
GROUP BY movie.title, movie.production_year;
答案 0 :(得分:0)
当您必须访问不同表的结果时Common Table Expressions(WITH查询)可以生成非常易读的查询。
WITH actors_awards as (
SELECT count(*) as n_awards FROM actor_award
WHERE actor_award.title = 'Titanic'
AND (actor_award.result = 'won' or actor_award.result = 'Won')
AND actor_award.award_name = 'Oscar'
),
crew_awards as (
SELECT count(*) as n_awards FROM crew_award
WHERE crew_award.title = 'Titanic'
AND (crew_award.result = 'won' or crew_award.result = 'Won')
AND crew_award.award_name = 'Oscar'
),
movie_awards as (
SELECT count(*) as n_awards FROM movie_award
WHERE movie_award.title = 'Titanic'
AND (movie_award.result = 'won' or movie_award.result = 'Won')
AND movie_award.award_name = 'Oscar'
),
writer_awards as (
SELECT count(*) as n_awards FROM writer_award
WHERE writer_award.title = 'Titanic'
AND (writer_award.result = 'won' or writer_award.result = 'Won')
AND writer_award.award_name = 'Oscar'
),
director_awards as (
SELECT count(*) as n_awards FROM director_award
WHERE director_award.title = 'Titanic'
AND (director_award.result = 'won' or director_award.result = 'Won')
AND director_award.award_name = 'Oscar'
)
SELECT 'titanic' as title,
'1997' as production_year,
(actor_awards.n_awards + crew_awards.n_awards + movie_awards.n_awards + writer_awards.n_awards + director_awards.n_awards) as n_awards
FROM actor_awards, crew_awards, movie_awards, writer_awards, director_awards;
考虑到我没有运行查询,因此可能会出现拼写错误。