【问题标题】:MySql : Updating all except the first row [duplicate]MySql:更新除第一行之外的所有内容[重复]
【发布时间】: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

标签: mysql sql group-by


【解决方案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://stackoverflow.com/a/43610081/6366458

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多