You can‘t specify target table ‘student‘ for update in FROM clause

错误信息 "You can't specify target table 'student' for update in FROM clause" 表示你试图在一个 UPDATE 语句中使用 FROM 子句来指定要更新的表,但是这个表是目标表,不能作为 FROM 子句的来源。这通常发生在尝试执行自连接更新(即更新同一个表中的不同行)时。

在MySQL中,如果你需要基于同一个表中的不同行来更新数据,你可以使用自连接,但是不能直接在 UPDATE 语句中使用 FROM 子句。相反,你应该使用内部引用或者子查询。

例如,如果你想基于 student 表中的 age 列的值来更新 student 表中的 grade 列,你可以使用以下语法:

UPDATE student
SET grade = CASE
    WHEN age < 18 THEN 'Minor'
    WHEN age >= 18 THEN 'Adult'
    ELSE 'Unknown'
END
WHERE age IS NOT NULL;

如果你需要从表中选择特定的行来更新另一行,你可以使用子查询:

UPDATE student AS s1 SET s1.grade = 'A' WHERE EXISTS ( SELECT 1 FROM student AS s2 WHERE s2.id = s1.id AND s2.age = 20 );

在这个例子中,我们使用了一个子查询来查找 student 表中 age 为 20 的行,然后更新这些行的 grade 列。

如果你确实需要在一个 UPDATE 语句中使用 FROM 子句,并且目标表和源表是不同的,你可以这样做:

UPDATE student INNER JOIN other_table ON student.id = other_table.student_id SET student.grade = 'B' WHERE other_table.some_condition;

在这个例子中,student 是目标表,other_table 是源表,我们使用 INNER JOIN 来基于 other_table 中的数据更新 student 表。

确保你的 UPDATE 语句符合你的实际需求,并且正确地使用了子查询或连接来实现你的目标。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值