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:更新除第一行之外的所有内容[重复]的主要内容,如果未能解决你的问题,请参考以下文章

jQuery删除除第一行之外的所有表行

EXCEL VBA怎样将复制 wb的sheet1除第一行的所有内容复制操作,选择性粘贴为值或数字格式?怎样写?

jQuery:查找重复的 ID 并删除除第一个之外的所有 ID

c_str() 输入一个字符串 - 除第一行之外的所有其他行都将丢失

删除 VIM 中除第一列之外的所有内容

随机播放数据框中的特定行[重复]