mysql - mySQL 将带有 Join 的 SELECT 转换为更新
问题描述
在一些当之无愧的评论之后,我没有提供足够的细节。我已经重写了我之前删除的问题。
我有两张桌子:
race_results
系列中每场特定比赛的船只和船长列表。可以有一堆。
race_idboat_id 点船长 1 45 3 John Doe 2 45 1 Jane Sailor 3 45 6 John Doe 1 51 2 Bob Fast 2 51 3 Bob Fast 3 51 4 Bob Fast
series_results
该表包含系列中的每场比赛以及race_id=99 记录,这是所有比赛的总位置。(不用担心两张表中的积分相同,在某些情况下比赛和系列赛使用不同的公式)
series_id race_id boat_id points skipper
98 1 45 3
98 2 45 1
98 3 45 6
98 99 45 4
98 1 51 2
98 2 51 3
98 3 51 4
98 99 51 3
两个表都有作为船长名称的列。有趣的是,每场比赛的队长都可能不同。所以我想要做的是将series_results
表中的船长名称设置为串联skipper
列表。这个查询很好地完成了这部分。
SELECT en.boat_id, GROUP_CONCAT(DISTINCT(skipper) SEPARATOR ' & ') as skipper
FROM series_results sr
LEFT JOIN race_results rr
ON rr.race_id =sr.race_id AND re.boat_id=sr.boat_id
WHERE sr.series_id='98'
GROUP BY rr.boat_id
在这里,我被卡住的是如何将其转换为适当UPDATE
的sr.skipper
新连接版本。
这是我正在寻找的最终结果。
series_id race_id boat_id points skipper
98 1 45 3 John Doe & Jane Sailor
98 2 45 1 John Doe & Jane Sailor
98 3 45 6 John Doe & Jane Sailor
98 99 45 4 John Doe & Jane Sailor
98 1 51 2 Bob Fast
98 2 51 3 Bob Fast
98 3 51 4 Bob Fast
98 99 51 3 Bob Fast
这个 UPDATE 代码给了我一个语法错误GROUP BY.....
。
UPDATE series_results sr
LEFT JOIN race_results rr
ON rr.race_id =sr.race_id AND re.boat_id=sr.boat_id
SET sr.skipper= GROUP_CONCAT(DISTINCT(rr.skipper) SEPARATOR ' & ')
WHERE sr.series_id='98'
GROUP BY rr.boat_id
我尝试了一个相关的子查询,但这只会更新系列表中的race_id 1。我希望所有这些都更新,尤其是 99。
谢谢你的帮助。戴夫
解决方案
将您的选择查询加入到series_results
:
UPDATE series_results s INNER JOIN (
SELECT rr.boat_id, sr.series_id,
GROUP_CONCAT(DISTINCT(rr.skipper) SEPARATOR ' & ') as skipper
FROM series_results sr LEFT JOIN race_results rr
ON rr.race_id =sr.race_id AND rr.boat_id=sr.boat_id
WHERE sr.series_id = '98'
GROUP BY rr.boat_id, sr.series_id
) g ON g.boat_id = s.boat_id AND g.series_id = s.series_id
SET s.skipper = g.skipper;
请参阅演示。
结果:
| series_id | race_id | boat_id | points | skipper |
| --------- | ------- | ------- | ------ | ---------------------- |
| 98 | 1 | 45 | 3 | Jane Sailor & John Doe |
| 98 | 2 | 45 | 1 | Jane Sailor & John Doe |
| 98 | 3 | 45 | 6 | Jane Sailor & John Doe |
| 98 | 99 | 45 | 4 | Jane Sailor & John Doe |
| 98 | 1 | 51 | 2 | Bob Fast |
| 98 | 2 | 51 | 3 | Bob Fast |
| 98 | 3 | 51 | 4 | Bob Fast |
| 98 | 99 | 51 | 3 | Bob Fast |
推荐阅读
- arduino - Arduino IDE 检测到错误的端口
- r - 如何在 R 中编写 CSV 文件
- wordpress - 如何将 wordpress 站点设置为独立 html 站点的子站点?
- python - 用于许多请求的 Python HTTP 服务器共享对象
- radio-button - 如何让 Optionmenu Var 的输出出现在新的类似窗口(Optionmenu)中以进行编辑和更新?
- r - 将 ID 分配给 plotly boxplot 中的异常值
- php - php url重定向脚本上的未定义索引错误
- bootstrap-5 - 引导程序 v5 中的媒体类到 Flex(实用程序类)
- git - 无法访问非默认帐户
- python - Flask SQLAlchemy中所有组的第一行