2017-10-12 72 views
0

你能幫我這個SQL嗎?SQL更新與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

使用case語句 –

+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