MySql:更新除第一行之外的所有内容[重复]
Posted
技术标签:
【中文标题】MySql:更新除第一行之外的所有内容[重复]【英文标题】:MySql : Updating all except the first row [duplicate] 【发布时间】:2020-10-30 08:27:54 【问题描述】:我查看了之前的答案,例如 this,但它给了我以下错误:You can't specify target table 'table_name' for update in FROM clause
。
我有一张表,其中包含 3 列(id -> 自动递增主 id):
id、roll_no 和出勤率
对于每个具有多个条目的选定卷号,except the first entry
我想将所有条目 attendance
字段更新为 P
。
我写的查询如下:
UPDATE tbl_class_attendance
set attendance = 'P'
where id NOT IN
(Select min(id)
from tbl_class_attendance
WHERE roll_no IN ('25', '45', '55')
GROUP
BY roll_no;
但它给了我上述错误。 我还查看了其他要求使用两个选择查询的答案,但我发现答案并不完全容易理解,而且我选择的卷号列表执行起来也很困难。
那么,有办法更新吗?
编辑:下面给出的答案
【问题讨论】:
顺便提一下,这个查询不会给出那个错误 看到这个thread @Sergiu 答案不适用于嵌套选择中的 Group by 使用多表 UPDATE 语法 - 子查询必须在 UPDATE 子句表列表中,而不是在 WHERE 子句中。 @Strawberry 它给出了错误You can't specify target table 'table_name' for update in FROM clause
【参考方案1】:
UPDATE tbl_class_attendance t1
LEFT JOIN ( SELECT t2.roll_no, MIN(t2.id) id
FROM tbl_class_attendance t2
WHERE t2.roll_no IN ('25', '45', '55')
GROUP BY t2.roll_no ) t3 USING (roll_no, id)
SET t1.attendance = 'P'
WHERE t3.id IS NULL;
【讨论】:
【参考方案2】:通过以下方式让它工作:
Update table SET a=value WHERE x IN
(Select * from (select x from table where condition) as t)
信用:https://***.com/a/43610081/6366458
【讨论】:
以上是关于MySql:更新除第一行之外的所有内容[重复]的主要内容,如果未能解决你的问题,请参考以下文章
EXCEL VBA怎样将复制 wb的sheet1除第一行的所有内容复制操作,选择性粘贴为值或数字格式?怎样写?
jQuery:查找重复的 ID 并删除除第一个之外的所有 ID