繁体   English   中英

更新mysql中同一个表中的多行

[英]Update multiple rows from same table in mysql

根据同一表中的数据更新多行上的单个列。

update table1 set status=newtime
    from (
            select
            case
            when TIME_FORMAT( TIMEDIFF( ADDTIME( time_val, '120:00:00' ), NOW() ), '%Hh %im %ss')<0 then '4'
            else '0'
            end as newtime,
            id as new_id
            FROM table1
            where id2='2'
            and status='0'
    )
where id=new_id

这是我的查询。 提前致谢。

编辑:

这是实现此目的的替代查询。 但它也给了我一个错误

update table1 set status=
        (select
        case when timeleft<0 then '4' else '0' end as something,
        new_id
        from
            (
                select
                TIME_FORMAT( TIMEDIFF( ADDTIME( time_val, '120:00:00' ), NOW() ), '%Hh %im %ss') as newtime,
                id as new_id
                FROM
                table1 
                where id2='2' and
                status='0'
            )
        }
    where id=new_id

“#1248 - 每个派生表都必须有自己的别名”。

我无法使用别名,因为我正在从查询中获取两列。 任何帮助都会很棒。

UPDATE语句在 MySQL 语法中没有FROM子句。 但是,您可以针对子查询JOIN table

UPDATE 
  table1 t1
  JOIN (
      select
        case
          when TIME_FORMAT( TIMEDIFF( ADDTIME( time_val, '120:00:00' ), NOW() ), '%Hh %im %ss')<0 then '4'
          else '0'
        end as newtime,
        id as new_id
      FROM table1
      WHERE id2='2' AND status='0'
  ) tsub ON t1.id = tsub.new_id
SET status = tsub.newtime

在我看来,您根本不需要进行任何子查询或加入。 这应该做你想做的:

UPDATE table1
SET status = CASE WHEN TIME_FORMAT(TIMEDIFF(ADDTIME(time_val, '120:00:00'), NOW()), '%Hh %im %ss') < 0 THEN '4' ELSE '0' END
WHERE id2 = '2' AND status = '0'

在您编写的查询中,您的子查询将返回新的time_val和要更新的行的 id 号,对于任何符合条件id2 = '2' AND status = '0' 然后,您将更新所有这些行(符合上述条件的行)并将status设置为新的time_val

与其先选择它们,不如去掉中间人,然后用新值更新与该条件匹配的所有行。 您的查询将更快、更直接。

除了简化版本(由@Travesty3 提供)之外,您似乎正在使用一大堆日期和时间函数来测试一个简单的事情:

UPDATE table1 
SET status = '4'
WHERE id2 = '2' 
  AND status = '0'
  AND time_val < NOW() - INTERVAL 120 HOUR 

我们可以通过同一个表或两个不同的表以这种方式更新多行表,只需从我的程序中发布一段 mysql 代码

将 documentcolumns 更新为 tb1,将 documentcolumns 更新为 tb2 设置 tb1.documentColumnPos = tb2.documentColumnPos 其中 tb1.userID = user_id 和 tb2.userID 为 NULL 且 tb1.columnNameDefID= tb2.columnNameDefID 和 tb1.tabtype = tab2.tab 和 tb_type = tab2.tab
,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM