gpt4 book ai didi

mysql - 如何从同一 mysql 表上的子查询更新临时字段(避免 MySql 错误 #1093)

转载 作者:行者123 更新时间:2023-11-28 23:18:51 25 4
gpt4 key购买 nike

我有一个名为 marksheet 的学生分数表。

id  |   student |   score   |   position  
1 | Adora | 50 |
2 | Sam | 76 |
3 | Frank | 40 |


SELECT id, 1+(SELECT count(*) from marksheet a WHERE a.score >
b.score) as student_rank
FROM marksheet b


id | student | score | student_rank
1 | Adora | 50 | 2
2 | Sam | 76 | 1
3 | Frank | 40 | 3

问题是,我想同时运行排名查询和更新查询。我希望将排名作为位置存储在表中。所以我跑:

UPDATE marksheet AS marks SET  marks.position =
(SELECT id, 1+(SELECT count(*) from marksheet a WHERE a.score >
b.score) as student_rank
FROM marksheet b ) ;

MySQL 说:

#1093 - Table 'marksheet' is specified twice, both as a target for  
'UPDATE' and as a separate source for data

我在 stackoverflow 上浏览过通过自身的子查询更新表的类似情况。我遇到了很多例子,我学到了一两件事,但是,我尝试改编这些例子但没有成功。非常感谢任何建议。

最佳答案

您必须为 marksheet 表使用别名,然后将其与原始表连接,如下所示:

UPDATE marksheet AS marks
JOIN (
SELECT id, 1+(SELECT count(*) from marksheet a WHERE a.score >
b.score) as student_rank
FROM marksheet b
) t
SET marks.position = t.student_rank
WHERE marks.id = t.id

关于mysql - 如何从同一 mysql 表上的子查询更新临时字段(避免 MySql 错误 #1093),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42647688/

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