如何在PostgreSQL查询中实现正确的连接?

时间:2018-02-18 05:14:35

标签: sql postgresql

我遇到了生成查询的麻烦,因为我是新手。

我有4张桌子:电影,收视率,校长和演员

电影表包括:tconst(一键),标题,开始年份
评级表包括:tconst(一键),平均评分,选民人数
演员表包括:演员姓名,出生年份,死亡年份,nconst(一键)
principal表是一个联结表:nconst,tconst

我想创建一个表格,其中一列可以是电影的一年,第二列是当年发行的所有电影,第三列是所有演员在该年之后出生的

我使用了查询

SELECT 
    movies.start_year, 
    array_agg(DISTINCT(actors.name)) AS actors_born_after, 
    array_agg(movies.title) AS movies_title, 
    array_agg(DISTINCT(actors.birth_year)) 
FROM movies 
INNER JOIN principals on movies.tconst=principals.tconst 
INNER JOIN actors on principals.nconst=actors.nconst 
WHERE actors.birth_year > movies.start_year 
GROUP BY movies.start_year 
limit 5;

但这似乎不起作用。

1 个答案:

答案 0 :(得分:0)

尝试一下:

SELECT 
    movies.start_year, 
    movies_agg.movies_title, 
    array_agg(DISTINCT(actors.name)) actors_born_after -- Get list of actors
FROM movies
LEFT JOIN (
    SELECT start_year, array_agg(DISTINCT(title)) AS movies_title -- Get all movies per each year
    FROM movies a
    GROUP BY start_year
) AS movies_agg ON movies.start_year = movies_agg.start_year -- Get list of movies from same year
LEFT JOIN actors ON actors.birth_year > movies.start_year -- Get all actors born after movie start_year
GROUP BY movies.start_year, movies_agg.movie_titles

这应该给你:

  • 电影年
  • 当年发行的所有电影
  • 在那一年之后出生的所有演员

我还没有测试过,所以您可能会遇到一些语法错误。试一试,让我知道。