【问题标题】:How to create a view that can identify each person's club out of many club?如何创建一个可以从众多俱乐部中识别每个人的俱乐部的视图?
【发布时间】:2017-10-17 14:14:51
【问题描述】:

我正在制作俱乐部成员的数据库,我发现了这个问题。

假设:

  1. 有些人想加入俱乐部。

  2. 假设有 10 个俱乐部。

  3. 每个选择加入1到5个俱乐部

  4. 每个俱乐部的管理员拥有所有加入他的俱乐部的人的数据。

    (例如:如果 A 加入足球俱乐部,那么足球俱乐部的管理员会有他的名字,但他不知道 A 是否加入其他俱乐部。)

  5. 我有所有选择加入俱乐部的人的数据。(从每个俱乐部的管理员处获取。)

    如果 A 加入了 3 个俱乐部,这意味着我有 3 个带有 A 名字的桌子。

  6. 我创建了一个存储每个俱乐部名称的表。

问题

如果不仅有 A,而且有 100 个这样的人,那么我如何创建一个包含一个人的姓名和他们加入的所有俱乐部的表?

我可以创建一个格式如下的视图表吗:
personID、personName、club1、club2、club3、club4、club5(club# 可以为空)

personID、personName、allOfClubs

我必须手动检查每个人吗?

【问题讨论】:

  • 你有当前的code或erd等吗?
  • 如果您无法提出一个好的问题,请阅读Tips for asking a good Structured Query Language (SQL) question。我不能完全理解你的意思。示例表和基于这些表的预期输出有助于明确您的问题(并为我们提供一些东西来测试我们的答案)
  • 您的原始标题本身就值得反对。我们的目标并不完全是在这里以家庭为导向的体验,但我们希望它是专业的。如果您在表达如何描述事物时遇到困难,请以不给志愿编辑更多工作的方式来做。也请花时间学习格式化工具——在 Markdown 中使用段落和列表,你不需要添加 HTML。

标签: sql database ms-access


【解决方案1】:

您不会将这样的数据存储在数据库中 - 这是 Excel 电子表格的想法。 您应该至少有三张桌子,如果一个俱乐部可以有多个管理员,则可能有四张桌子。

您的表格应该是 People、Clubs、Memberships。

Memberships 是一个联结表,您存储一个 PersonId、一个 ClubID,可能还有一些其他信息加入日期等。

这样,您就可以让一个人加入任意数量的俱乐部。

【讨论】:

  • 谢谢!!我认为它有效。根据我的原始数据,这非常合适!
    使用成员表作为连接对数据冗余有很大帮助!
【解决方案2】:

首先你需要 UNION 所有的俱乐部桌子:

 SELECT 'football' as club, person FROM club1 UNION ALL
 SELECT 'rugby'    as club, person FROM club2 UNION ALL

 ....
 SELECT 'tennis'   as club, person FROM clubN

然后使用PivotTable

【讨论】:

  • 你的也不错,但我发现 Minty 的答案要容易得多,因为我对数据透视表了解一点(我认为它可以在数据对时间敏感但我的原始数据只是名称和俱乐部,所以我认为我不需要它。)Minty 的标准化方法进展顺利。顺便说一句,非常感谢。上帝保佑你。
  • 是的,我也在考虑 Minty 解决方案。但是你的问题是每个球队经理只知道他的数据,所以我认为如果每个经理单独处理他的球员名单,将所有数据放在一起不是一个选择。无论如何,在那种格式下,您仍然需要数据透视表以您想要的格式显示数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-19
  • 1970-01-01
  • 2021-08-05
  • 2021-06-05
  • 2022-01-20
相关资源
最近更新 更多