【问题标题】:Writing a query in strictly relational algebra (AS IN NOT SQL/MYSQL)用严格的关系代数编写查询(AS IN NOT SQL/MYSQL)
【发布时间】:2012-11-07 02:49:55
【问题描述】:

所以这里有三个关系:

表格成员

成员(member_id、姓名、城市、州)

其中 member_id 是主键

借用表

借来的(borrow_id, lib_id, member_id)

其中borrow_id是主键

表库

库(lib_id、lib_address、lib_city、lib_state)

其中 lib_id 是主键

lib_id 和 member_id 都是外键

所以我正在尝试编写一个查询来查找在他们所在城市的每个图书馆借过书的成员的所有 member_id。这意味着

members.city = libraries.lib_city AND members.state = libraries.lib_state

我正在考虑使用关系除法。例如,您有一个由 member_id 和他们借书的所有 lib_id 组成的关系。然后您将其除以包含该成员所在城市中所有 lib_id 的关系。

但是,我不知道如何用关系代数术语来写这个。

在 mysql/sql 中这很容易,但转换为关系代数是我卡住的地方。

【问题讨论】:

  • 感谢您的编辑......但这并不能帮助我找出问题所在......

标签: sql relational-database relation relational-algebra relational-division


【解决方案1】:

一种策略是将每个member_idCOUNT(DISTINCT lib_id) 与每个城市的COUNT(DISTINCT lib_id) 总数相匹配。如果两者相等,则个人已从他所在城市的每个图书馆借阅。

认为以下内容可以胜任:

SELECT 
  member_id, 
  /* Total libraries borrowed from by member */
  COUNT(DISTINCT Borrowed.lib_id) AS num_libs_borrowed,
  /* Total libs in the member's city */
  COUNT(DISTINCT Libraries.lib_id) AS total_city_libs
FROM 
  Members
  /* JOIN the city between Members & Libraries */
  JOIN Libraries ON Members.city = Libraries.lib_city
  /* JOIN member to borrowed */
  JOIN Borrowed ON Members.member_id = Borrowed.member_id
GROUP BY member_id 
/* If the number of libs borrowed from = the total libs in the city... */
HAVING num_libs_borrowed = total_city_libs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多