【问题标题】:SQL query - Find all couples of actors who has played EXACTLY in the same moviesSQL 查询 - 查找所有在同一部电影中完全出演过的演员
【发布时间】:2019-05-16 10:46:04
【问题描述】:

我正在为即将参加的数据库考试练习,但我不知道如何进行此查询。

我按原样复制粘贴练习: 给定2张桌子

FILM(Title, Director, Year, Genre)
InCastOf(Actor, Film) Where InCastOf(film) is constrained to Film(Title)

编写查询以查找所有在同一部电影中完全出演过的演员。

到目前为止我得到的是:

SELECT InCastOf.Actor AS A1, T.Actor AS A2, InCastOf.Film FROM InCastOf
JOIN (SELECT Actor, Film FROM InCastOf) AS T ON InCastOf.Film = T.Film
WHERE  InCastOf.Actor != T.Actor

这让我为每部电影返回了一对在其中扮演的演员。我可以使用 group by etc 来确定查询,但是“Exactly”这个词给我带来了一些麻烦,因为我需要确保这些演员只在同一部电影上工作,而不是其他任何事情。至少这是我从“完全”这个词中所理解的。

感谢您的帮助!

【问题讨论】:

  • 如果您可以接受一些虚假点击,您可以在每个演员的电影 ID 上使用 CHECKSUM_AGG。然后找到两个具有相同校验和的actor。
  • “Fasle Hits”似乎与“Exactly”不符。
  • 这点很好。
  • 您可以在您的 DBMS 中使用 GROUP_CONCAT 或同等概念,但具有相同的概念
  • GROUP_CONCAT 这件事让我非常接近,我现在只有一个问题,它返回 A1, A2, GROUP_CONCAT(FILM) 并且有很多类型的 actorA、actorB、[x , y, z] 和 actorB, actorA, [x, y, z] 实际上是相同的,但 DISTINCT 显然不起作用。我该如何解决?

标签: sql group-concat


【解决方案1】:

感谢@Martin Smith 的提示,我编写了如下查询:

SELECT T1.Actor AS A1, T2.Actor AS A2, T1.films FROM (
    SELECT Actor, GROUP_CONCAT(Film) AS films
    FROM InCastOf 
    GROUP BY Actor) AS T1
JOIN (
    SELECT Actor, GROUP_CONCAT(Film) AS films
    FROM InCastOf 
    GROUP BY Actor) AS T2 
ON T1.films = T2.films
WHERE T1.Actor > T2.Actor

【讨论】:

    猜你喜欢
    • 2017-07-04
    • 2015-06-25
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 2017-05-10
    • 2020-08-03
    相关资源
    最近更新 更多