2017-10-12 12 views
0

このSQLを手伝ってもらえますか?SQL Update with CASE

UPDATE VERSION 
SET VERSION_STATUS_ID = IF((SELECT COUNT(*) from VERSION where KEY = 'ABC') > 1, 5, 6) 
WHERE VERSION_ID = 1; 

エラーレポート - SQLエラー:ORA-00907:欠落している右括弧 00907. 00000 - "不足している右括弧"

おかげ

+0

ケースの文を使用する –

+0

@ Ryan Jarlhはあなたに言うでしょう、実際には 'CASE' _expression_です。 –

+0

CASEは標準のSQLであり、ほぼすべてのデータベースで動作するため、あなたの友人です:http://modern-sql.com/feature/case –

答えて

1

CASE表現を使用します

UPDATE VERSION 
SET VERSION_STATUS_ID = CASE WHEN (SELECT COUNT(*) from VERSION where KEY = 'ABC') > 1 
          THEN 5 ELSE 6 END 
WHERE VERSION_ID = 1; 
+0

ありがとう!できます :) – GGG

0

EXISTSは通常、サブクエリでCOUNT(*)より効率的です。あなたは、テーブル内で一意のID列を持っている場合は、あなたが使用することができます。

UPDATE VERSION v 
    SET VERSION_STATUS_ID = (CASE WHEN EXISTS (SELECT 1 
               FROM VERSION v2 
               WHERE v2.KEY = 'ABC' AND 
                v2.VERSION_ID <> v.VERSION_ID 
              ) > 1 
            THEN 5 ELSE 6 
          END) 
WHERE VERSION_ID = 1; 

をこれはVERSION_IDが一意であることを前提としています。このような明示的に宣言された列がない場合は、代わりにROWIDを使用できます。