【发布时间】:2018-01-26 17:26:19
【问题描述】:
我有三张桌子:
教练
- c_id
- cName
设备
- e_id
- 易名
- c_id
- 用语
运动
- c_id
- 运动
这是一个指向 SQL FIDDLE 页面的链接,以便您可以查看准备好的表以更好地理解我的意思。 SQL Fiddle prepared tables
每个字段的简要说明 c_id = 教练 ID,cName = 教练姓名,e_id = 设备 ID,eName = 设备名称,termUsed = 设备迄今为止使用的术语数,sports = 他们教授的运动(有些教授多个)
运动表已标准化,他们教授的每项运动都有一个字段。有些教练只教授一项运动,有些教练教授多项运动。根据我在 StakOverFlow 上看到的其他帖子,我被建议对数据进行规范化。
主键教练(c_id),设备(e_id)
外键
装备(c_id) 参考 教练(c_id)
运动(c_id)参考教练(c_id)
我需要什么
(结果集在列中)
[教练 A_id][教练 A_name][装备 A_id][装备 A_Name][Common Sport][教练 B_id][教练 B_name][装备 B_id][装备 B_name]
我需要一个返回两个教练 ID 和姓名的结果集,他们教授的常见运动,以及根据他们的术语使用匹配的设备(属于每个相应的教练)(使用设备的术语数量相等)为了)。
*在过去的一周里,我能弄清楚的是:*
SELECT DISTINCT sa.c_id, sb.c_id, sb.sport, coach.name
FROM sportsTaught sa, sportsTaught sb
JOIN coach ON coach.c_id = sb.c_id
WHERE sa.sports = sb.sports
AND sa.c_id <> sb.c_id
ORDER BY sb.c_id;
到目前为止,这就是我能够弄清楚的全部;一个查询,它允许我匹配并显示两位教练的结果,他们分享他们教授的一项或多项常见运动。这只解决了问题的一部分,因为它使教练与他们教授的共同运动相匹配,但它也不匹配基于他们使用的术语数量的设备(由个别教练拥有)。
目标
这个项目的重点是在社区中心匹配教练(他们自己购买设备),根据一项共同的运动来交易(同样磨损的)设备。请记住,这是在一个低收入社区,所以我们没有太多的预算可以使用。所以我正在创建这个数据库作为降低成本和更加机智的解决方案。也为了帮助教练获得同样破旧的设备......这样没有人会得到比他们交易的设备更旧的设备。我们很穷..所以我们尽量足智多谋。排球也可以用作足球来教孩子们。这不是一个专业的团队,它是一个针对低收入地区儿童的社区中心外展计划。
我曾因发布低质量帖子而被警告过。我已阅读必要的文件,并尽我所能在发帖时遵守所有规则和准则。在发布这篇文章之前,我也搜索了一周以找到答案。
【问题讨论】:
-
sportsTaught表是什么?它没有显示在顶部。应该是sport? -
所以教练只能共享他们的设备,如果使用频率相同?
-
@Barmar 是的,对此感到抱歉...sportTaught 应该是运动
-
@M.Wagner 是的,他们只允许在设备平等使用的情况下共享设备....所以相同数量的条款