你能幫我這個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 - 「缺少右括號」
感謝
你能幫我這個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 - 「缺少右括號」
感謝
使用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;
謝謝!有用 :) – GGG
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
。
使用case語句 –
@Ryan Jarlh會告訴你,它實際上是一個'CASE' _expression_。 –
CASE是你的朋友,因爲它是標準的SQL,幾乎適用於所有數據庫:http://modern-sql.com/feature/case –