【问题标题】:How to remove duplicate tuples after join?加入后如何删除重复的元组?
【发布时间】:2021-04-22 03:02:33
【问题描述】:

我正在为一个简单的 SQL 查询而苦苦挣扎。 有两种关系:movieGenre(movieID,genreName),movie(movieID,movieName)。 我需要制作一个新的电影名称表,它们共享一个共同的流派。 这是我提出的查询:

with movie_info(movieid, genreName, movieName) as (
    select
        movieID,
        genreName,
        movieName
    from
        movieGenre natural
        join movie
)
select
    m2.genreName,
    m1.movieName,
    m2.movieName
from
    movie_info as m1,
    movie_info as m2
where
    m1.movieID <> m2.movieID
    and m1.genreName = m2.genreName
order by
    m1.genreName,
    m1.movieName;

结果如下所示:

但正如您所见,元组 #1 和 #2 代表相同的事物(就像 #3 和 #6、#9 和 #10 一样),所以我只想显示其中一个。

有什么办法可以解决这个问题吗?

【问题讨论】:

  • 您应该始终披露显示数据类型和约束(CREATE TABLE 语句)的实际表定义以及您的 Postgres 版本。以及查询的目标。很有可能,这可能更有效。此外,您披露的关系设计似乎没有意义,可能是由于问题过于简单。

标签: sql database postgresql


【解决方案1】:

将不相等条件更改为 > 并处理重复项:

也可以代替隐式连接“,使用隐式连接

with movie_info(movieid, genreName, movieName) as (
    select
        movieID,genreName,movieName
    from movieGenre 
    natural join movie
)
select
    m2.genreName,
    m1.movieName,
    m2.movieName
from
    movie_info as m1
join movie_info as m2
  on m1.genreName = m2.genreName
where
    m1.movieID < m2.movieID -- < here
order by
    m1.genreName,m1.movieName;

【讨论】:

  • 我是 SQL 新手,而且它工作正常。非常感谢。
猜你喜欢
  • 2020-08-20
  • 1970-01-01
  • 2016-09-07
  • 2019-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-18
相关资源
最近更新 更多