【问题标题】:Find in raw sql by join table通过连接表在原始 sql 中查找
【发布时间】:2020-03-29 21:12:32
【问题描述】:

给定 3 张桌子。我需要构建 SQL 查询来找到两个演员一起最多的演员并列出标题 那些电影。按字母排序

https://www.db-fiddle.com/f/r2Y9CpH8n7MHTeBaqEHe9S/0

表film_actor

 Column     | Type                        | Modifiers
------------+-----------------------------+----------
actor_id    | smallint                    | not null
film_id     | smallint                    | not null

... 表演员

 Column     | Type                        | Modifiers
------------+-----------------------------+----------
actor_id    | integer                     | not null 
first_name  | character varying(45)       | not null
last_name   | character varying(45)       | not null

... 桌膜

 Column     | Type                        | Modifiers
------------+-----------------------------+----------
film_id     | integer                     | not null
title       | character varying(255)      | not null

... 所需的输出:

first_actor | second_actor | title
------------+--------------+--------------------
John Doe    | Jane Doe     | The Best Movie Ever

...

【问题讨论】:

  • 示例表数据和预期结果会有所帮助。 minimal reproducible example
  • @jarlh 你能解释一下我需要添加什么吗?我在帖子底部提供了预期的结果
  • 是,但缺少匹配的样本数据。 (通常每张表几行就可以了。)
  • @jarlh 如何添加它?

标签: sql


【解决方案1】:

输入数据和预期结果会有所帮助。另外,请标记您正在使用的数据库。你可以试试下面的代码,看看它是否有效:

SELECT (a.first_name || ' ' || a.last_name) AS First_Actor,
       (b.first_name || ' ' || b.last_name) AS Second_Actor,
       c.title
FROM actor a
JOIN
  (SELECT a.actor_id AS first_actor,
          b.actor_id AS second_actor,
          a.film_id
   FROM film_actor a
   JOIN film_actor b ON a.film_id = b.film_id
   AND a.actor_id < b.actor_id) ab ON a.actor_id = ab.first_actor
JOIN actor b ON b.actor_id = ab.second_actor
JOIN film c ON c.film_id = ab.film_id

【讨论】:

  • 太好了,非常感谢!剩下的只是添加选择条件最多的两个演员。并且只列出他们的电影
  • mb 你也可以帮我完成最后一部分吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-01
  • 2017-01-23
  • 2020-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多