【问题标题】:Data appear at least once for every record每条记录的数据至少出现一次
【发布时间】:2014-12-06 00:09:24
【问题描述】:

假设我有三张表:电影、分店、租借,其中分店告诉电影租赁店的不同分店。现在我想找到所有在每个分店至少租过一次的电影。我真的不知道如何检查它们是否在每个分支机构至少租用一次。

这些是我制作的表格

Movie(mid, title, genre, year)
Branch(bid, bname, baddress)
Rented(mid, bid, copyid, outdate, returndate, cost)

【问题讨论】:

  • 您尝试过任何代码吗?
  • 从电影 m、分支 b、租用的 r 中选择 m.mid,其中 m.mid=r.mid 和 b.bid=r.bid。我已经像这样连接了它们,但在每个分支中都无法获得至少一次的逻辑。
  • 你读过@Jonathan给你的链接吗?

标签: mysql sql database


【解决方案1】:

计算每部电影的分支数并与总分支数进行比较。选择找到的电影。

select *
from movie
where mid in
(
  select mid
  from rented
  group by mid
  having count(distinct bid) = (select count(*) from branch)
);

【讨论】:

    【解决方案2】:

    由于您要返回已在每个分支中租借的所有电影,因此您可以为此使用聚合并将其与总分支的数量进行比较:

    SELECT m.mid
    FROM branch b
        JOIN rented r ON b.bid = r.bid
        JOIN movie m ON r.mid = m.mid
    GROUP BY m.mid
    HAVING COUNT(DISTINCT b.bid) = (SELECT COUNT(bid) FROM branch)
    

    【讨论】:

    • 此查询如何返回已在每个分店租借的电影?
    • @Lamak -- 更新了答案以归还已在所有分店租借的任何电影...
    • 我明白了。不幸的是,这不是我的反对意见。 (另外,我认为 JOINmovie 表不是必需的,因为您只是获取电影的 id)
    • @Lamak -- 不用担心,我同意 -- 可能根本不需要join,除非租用的表中可能存在不再存在于分支表或电影表中的记录。尽管如此,还是感谢您的澄清!
    猜你喜欢
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2016-11-28
    • 1970-01-01
    • 2017-11-09
    相关资源
    最近更新 更多