2013-07-15 73 views
2
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查詢 - 我可以不這樣做嗎?

子查詢返回多個值。當子查詢遵循=,!=,<,< =,>,> =或當子查詢用作表達式時,這是不允許的。

+0

不,如果您的表超過1條記錄,則不起作用。 – rsbarro

+0

謝謝@rsbarro。是否有可能通過單個查詢獲得該功能? – schar

+0

請看我的回答,那是你在找什麼?我不明白你爲什麼需要使用子查詢。 – rsbarro

回答

3

不,如果您的表超過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。

+0

謝謝。是的,第二個WHEN是不需要的。謝謝。 – schar

1

您在這裏遇到的問題是您沒有在子查詢中指定主鍵來匹配更新行的主鍵。因此它返回與錯誤信息所指的條件相匹配的所有行。

可能是你的代碼應閱讀:

UPDATE TableABC 
SET A = CASE 
      WHEN B - C >= A THEN A 
      WHEN B - C < A THEN B - C 
     END 

但是你的SQL不完整我不能肯定。