SQL插入一列失败,update要么锁表要么查询的结果超过一个

问题遇到的现象和发生背景

有表1和表2,如下

img

现在需要根据表2的ID在表1中查询ID对应的名字插入表2
怎么去做

问题相关代码,请勿粘贴截图

UPDATE Cla
SET Cla.SNAME = (
SELECT
Stu.SNAME
FROM
Cla,
Stu
WHERE
Cla.SID = Stu.SID
)

运行结果及报错内容

You can't specify target table 'Cla' for update in FROM clause

我的解答思路和尝试过的方法

当我选择中间表在查询就会有Subquery returns more than 1 row

我想要达到的结果

贴sql语句

update c
set c.sname=s.sname
from cla c
left join stu s on c.sid=s.sid

试试这个语句吧
update t set SNAME = (select SNAME from Stu as a where a.SID = t.SID ) from Cla as t
如果子查询有多个记录,就需要加max

还是那句话,我通过将select出的结果再通过中间表select一遍,得到的值是多于一行,但是这一组正是我要的,我要让这个结果对应更新到没一行

子查询里有多个值,你就需要从多个值中选一个,主表一个记录的字段值是不能更新多个值的,在子查询中使用max和min都可以

update t set SNAME = (select max(SNAME) from Stu as a where a.SID = t.SID ) from Cla as t