1

したがって、次の 3 つの関係があります。

テーブル メンバー

メンバー(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 では非常に簡単ですが、リレーショナル代数への変換で行き詰まります。

4

1 に答える 1

0

戦略の 1 つは、都市ごとの合計とCOUNT(DISTINCT lib_id)perを一致させることです。この 2 つが等しい場合、その個人は市内のすべての図書館から借りたことになります。member_idCOUNT(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
于 2012-11-07T04:59:48.427 に答える