gpt4 book ai didi

mysql - 多个变量、表和参数合并到一个查询中

转载 作者:可可西里 更新时间:2023-11-01 08:24:16 25 4
gpt4 key购买 nike

我有三个表:

教练

  • c_id
  • 姓名

设备

  • e_id
  • 姓名
  • c_id
  • 使用期限

运动

  • c_id
  • 运动

这是 SQL FIDDLE 页面的链接,这样您就可以看到准备好的表格,以便更好地理解我的意思。 SQL Fiddle prepared tables

每个字段的简要说明c_id = coach id, cName = coach name, e_id = equipment id, eName = ename of the equipment, termUsed = 到目前为止设备已经使用的学期数, sports = 他们教授的运动(有些教授多项)

运动表已标准化,其中针对他们教授的每项运动都有一个字段。有些教练只教授一项运动,有些则教授多项运动。根据我在 StakOverFlow 上看到的其他帖子,我被建议规范化数据。

主键 Coach(c_id), Equipment(e_id)
外键
装备(c_id) 引用教练(c_id)
运动(c_id)引用教练(c_id)

我需要什么
(结果集在列中)
[Coach A_id][Coach A_name][Equipment A_id][Equipment A_Name][Common Sport][coach B_id][Coach B_name][Equipment B_id][Equipment 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;

到目前为止,这就是我所能弄清楚的;一个查询,它允许我匹配并显示两位教练的结果,他们分享他们教授的一项或多项常见运动。这只解决了问题的一部分,因为它将教练与他们教授的一项常见运动相匹配,但它也不会根据他们使用的术语数量来匹配设备(由个别教练拥有)。

目标
这个项目的重点是在社区中心内匹配教练(他们自己购买了设备),根据一项共同的运动来交换设备(同样磨损)。请记住,这是在一个低收入社区,所以我们没有太多预算可以使用。所以我正在创建这个数据库作为降低成本和更足智多谋的解决方案。还可以帮助教练获得同样磨损的设备……这样就不会有人得到比他们交易的设备更旧的设备。我们很穷..所以我们尽量足智多谋。 Volley 也可以用作足球来教 children 。这不是一个专业团队,而是一个针对低收入地区 child 的社区中心外展计划。

我之前曾因发布低质量的帖子而受到警告。我已阅读必要的文件,并已尽力遵守所有规则和准则。在发这篇文章之前,我也搜索了一个星期来寻找答案。

最佳答案

改掉使用叉积的习惯,尤其不要将叉积与显式JOIN 混合使用。只需始终如一地使用 JOIN

要解决您的问题,您需要两次加入 coach 表,然后两次加入 equipment 表,每个教练一次。然后要求termUsed相同,但名称不同。

SELECT ca.c_id coachA_id, ca.cName coachA_name, ea.e_id equipmentA_id, ea.eName equipmentA_name, 
sa.sports,
cb.c_id coachB_id, cb.cName coachB_name, eb.e_id equipmentB_id, eb.eName equipmentB_name
FROM sportTaught sa
JOIN sportTaught sb ON sa.sports = sb.sports AND sa.c_id < sb.c_id
JOIN coach ca ON ca.c_id = sa.c_id
JOIN coach cb ON cb.c_id = sb.c_id
JOIN equipment ea ON ea.c_id = ca.c_id
JOIN equipment eb ON eb.c_id = cb.c_id AND ea.termUsed = eb.termUsed AND ea.eName != eb.eName
ORDER BY ca.c_id

DEMO

关于mysql - 多个变量、表和参数合并到一个查询中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48466469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com