【问题标题】:Select distinct pairs joining a table to itself in sql在sql中选择将表连接到自身的不同对
【发布时间】:2016-05-11 14:09:17
【问题描述】:

我有一个包含两行的表:IMDB_ID 和 Actor。我正在努力寻找合作出演 3 部电影或更多电影的演员。这对名称应该是唯一的,这意味着“演员 A,演员 B”和“演员 B,演员 A”是同一对,因此应该只出现其中一个。这是表格的几行,但不是全部:

IMDB_ID     ACTOR      
----------  -----------
tt0111161   Tim Robbins
tt0111161   Morgan Free
tt0111161   Bob Gunton 
tt0111161   William Sad
tt0111161   Clancy Brow
tt0111161   Gil Bellows
tt0111161   Mark Rolsto
tt0111161   James Whitm
tt0111161   Jeffrey DeM
tt0111161   Larry Brand
tt0111161   Neil Giunto
tt0111161   Brian Libby
tt0111161   David Prova
tt0111161   Joseph Ragn
tt0111161   Jude Ciccol
tt0068646   Marlon Bran
tt0068646   Al Pacino  

我试过了:

SELECT DISTINCT movie_actor.actor, movie_actor.actor, COUNT(movie_actor.actor) AS occurrence 
   FROM movie_actor join movie_actor 
   ON movie_actor.imdb_id = movies.imdb_id 
   WHERE occurrence >= 3
     GROUP BY movie_actor.actor 
     ORDER BY occurrence DESC, movie_actor.actor ASC;

并收到一个操作错误,内容为: 不明确的列名:movie_actor.actor

更新:

最终的可行解决方案如下(*注意单向不等式运算符,它可以防止反向重复对):

SELECT DISTINCT ma.actor, ma2.actor, COUNT(*) AS occurrence 
       FROM movie_actor ma join movie_actor ma2 
       ON ma.imdb_id = ma2.imdb_id 
       WHERE ma.actor > ma2.actor 
           GROUP BY ma2.actor, ma.actor 
           HAVING occurrence >= 3 
                ORDER BY occurrence DESC, ma2.actor ASC

【问题讨论】:

    标签: sql join sqlite distinct


    【解决方案1】:

    在使用自联接时,您应该使用表别名。但是,您的查询有很多问题,表明您需要更多地练习编写 SQL。一些好习惯:

    • 始终使用作为表名缩写的表别名。
    • 始终限定列名
    • 请记住使用having 子句,如果这是您的意图。

    这里的 SQL 更接近你想要做的:

    SELECT ma.actor, ma2.actor, COUNT(*) AS occurrence 
    FROM movie_actor ma join
         movie_actor ma2
         ON ma.imdb_id = ma2.imdb_id 
    GROUP BY ma.actor, ma2.actor
    HAVING COUNT(*) >= 3
    ORDER BY occurrence DESC, ma.actor ASC;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      相关资源
      最近更新 更多