【发布时间】:2023-03-23 21:59:01
【问题描述】:
感谢您查看此问题。我有点迷茫,希望有人能帮助我。下面是我想运行的更新查询。
此查询现在返回错误:
1054 - “where 子句”中的未知列“spi.et_cross_rank”
一些背景:
来自表:tmp_ranking_tbl
我想获得第 nth(spi.et_return_rank) 记录
对于值为 x (spi.et_cross_rank)
SET @rownum=0;
UPDATE STRToer_Poule_indeling spi
SET spi.team_id = (SELECT R.team_poule_id
FROM (SELECT @rownum:=@rownum+1 AS rownum, trt.team_poule_id
FROM tmp_ranking_tbl trt
WHERE trt.overal_rank = spi.et_cross_rank
ORDER BY trt.punten DESC, (trt.goals_voor - trt.goals_tegen) DESC, trt.goals_voor DESC) R
WHERE R.rownum = spi.et_return_rank)
WHERE spi.et_ronde = v_et_ronde
AND spi.poule_id IN (SELECT row_id FROM STRToer_Poules WHERE toernooi_onderdeel_id=v_onderdeel_id) ;
tmp_ranking_tbl 中的数据如下所示:
team_poule_id | punten | goals_voor | goals_tegen | overal_rank
65 | 6 | 10 | 10 | 2
69 | 6 | 9 | 10 | 2
75 | 7 | 11 | 4 | 2
84 | 6 | 6 | 8 | 2
112 | 5 | 7 | 7 | 2
提前感谢您的帮助!
在评论有关目标的问题后更新,我会尽量保持简短。 :-)
该查询在网站上用于保存锦标赛的分数。有时你有奇数支球队进入下一轮。那时我想选择最好的 3 号(spi.et_cross_rank)球队。这是保存在 STRToer_Poule_indeling 中的设置,每个 poule 的排名以及第 1、第 2 或第 n 队 (spi.et_return_rank)。表 tmp_ranking_tbl 中填满了所有排名为 3 的球队。当这个如果填满我想要第一个或第二个,取决于 STRToer_Poule_indeling 中的设置,记录返回。
STRToer_Poule_indeling 表的结构子集
row_id | team_id | et_ronde | et_cross_rank | et_return_rank
1 | null | 1 | 3 | 1
【问题讨论】:
-
也许是加入而不是子查询更新。
-
谢谢,你知道一个例子吗?还没有找到通过加入来做到这一点的方法。 (可能是我正在看它很长)。
(添加)我不知道如何使用连接的原因是 rownum 功能。记录集和限制的第 n 条记录不允许在其语句中使用变量
标签: mysql sql-update subquery