web-dev-qa-db-ja.com

複数のSETおよびWHEREを含むSQLステートメント

これが有効なクエリかどうか疑問に思っています:

UPDATE  table
SET ID = 111111259

WHERE ID = 2555

AND SET ID = 111111261

WHERE ID = 2724

AND SET ID = 111111263

WHERE ID = 2021

AND SET ID = 111111264

WHERE ID = 2017
36
ProgramNov

いや!

これらを個別に処理する必要があります

Update [table]
Set ID = 111111259
WHERE ID = 2555

Update [table]
Set ID = 111111261
WHERE ID = 2724

--...
45
Brandon Boone

最適なオプションは複数の更新です。

または、次の操作を実行できますが、[〜#〜] not [〜#〜]を推奨します:

UPDATE table
SET ID = CASE WHEN ID = 2555 THEN 111111259 
              WHEN ID = 2724 THEN 111111261
              WHEN ID = 2021 THEN 111111263
              WHEN ID = 2017 THEN 111111264
         END
WHERE ID IN (2555,2724,2021,2017)
44
niktrs

いいえ。これは有効なクエリではありません。複数のフィールドを持つSETステートメントは1つしか持てませんが、WHERE句も1つだけ持つことができます

update table1 set field1=value1, field2=value2, field3=value3 where filed4=value5
14
Ahmad

Nope、これがあなたのやり方です:

UPDATE table SET ID = 111111259 WHERE ID = 2555

UPDATE table SET ID = 111111261 WHERE ID = 2724

UPDATE table SET ID = 111111263 WHERE ID = 2021

UPDATE table SET ID = 111111264 WHERE ID = 2017
4
Kyle Undefined

いいえ、更新ごとに個別のクエリを作成する必要があります。

3
Limey

次のようにケースを使用することもできます:

UPDATE  table
SET ID = case

when ID = 2555 then 111111259

when ID = 2724 then 111111261

when ID = 2021 then 111111263

when ID = 2017 then 111111264

else ID
end

いいえ。個別の更新を行う必要があります。

UPDATE  table
SET ID = 111111259
WHERE ID = 2555

UPDATE  table
SET ID = 111111261
WHERE ID = 2724

UPDATE  table
SET ID = 111111263
WHERE ID = 2021

UPDATE  table
SET ID = 111111264
WHERE ID = 2017
2
BradC

あなたがそれをしたいすべての行をSQL​​するので、私はあなたがこのようなコードであると思います

あなたの内部でSQL管理もクエリを実行し、これは動作するはずです。

UPDATE  table
SET ID = 111111259 WHERE ID = 2555    

UPDATE  table
SET ID = 111111261 WHERE ID = 2724

UPDATE  table
SET ID = 111111263 WHERE ID = 2021

UPDATE  table
SET ID = 111111264 WHERE ID = 2017
2
PRacicot

いいえ、すべてのステートメントを個別に処理する必要があります。

UPDATE table1
 Statement1;
 UPDATE table 1
 Statement2;

等々

0
pr0grammaniac

あなたはこれを行うことができます

WITH V(A,B) AS (VALUES 
     (2555,111111259)    
    ,(2724,111111261)     
    ,(2021,111111263)    
    ,(2017,111111264)    

    )
SELECT COUNT(*) FROM NEW TABLE (
    UPDATE table
    SET id =     (SELECT B FROM V WHERE ID = A)
    WHERE EXISTS (SELECT B FROM V WHERE ID = A)
) 

列編成のテーブルでは機能しません。その場合はMERGEを使用します

0
Paul Vernon