簡體   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