update TABLE set A = (
SELECT
CASE
WHEN B - C >= A THEN A
WHEN B - C < A THEN B - C
END AS A
from
TABLE)
我得到的迴應是:SQL查詢 - 我可以不這樣做嗎?
子查詢返回多個值。當子查詢遵循=,!=,<,< =,>,> =或當子查詢用作表達式時,這是不允許的。
update TABLE set A = (
SELECT
CASE
WHEN B - C >= A THEN A
WHEN B - C < A THEN B - C
END AS A
from
TABLE)
我得到的迴應是:SQL查詢 - 我可以不這樣做嗎?
子查詢返回多個值。當子查詢遵循=,!=,<,< =,>,> =或當子查詢用作表達式時,這是不允許的。
不,如果您的表超過1條記錄,這將不起作用。在這種情況下,我不確定你爲什麼使用子查詢。我認爲你在尋找這樣的事情:
UPDATE MyTable
SET A =
CASE
WHEN B - C >= A THEN A
ELSE B - C
END
這個查詢將更新列A
爲表中的每個記錄。如果B - C
大於或等於A
,則A
的值將保持不變。否則,A
將設置爲B - C
。我也會使用ELSE
而不是兩個WHEN
s。
謝謝。是的,第二個WHEN是不需要的。謝謝。 – schar
您在這裏遇到的問題是您沒有在子查詢中指定主鍵來匹配更新行的主鍵。因此它返回與錯誤信息所指的條件相匹配的所有行。
可能是你的代碼應閱讀:
UPDATE TableABC
SET A = CASE
WHEN B - C >= A THEN A
WHEN B - C < A THEN B - C
END
但是你的SQL不完整我不能肯定。
不,如果您的表超過1條記錄,則不起作用。 – rsbarro
謝謝@rsbarro。是否有可能通過單個查詢獲得該功能? – schar
請看我的回答,那是你在找什麼?我不明白你爲什麼需要使用子查詢。 – rsbarro