2012-03-22 34 views
1

我有兩個實體的股票(名稱,數量)和PC_SYSTEMS(名稱,c_name),我希望更新創建PC_system的「Alienware」所需要的組件,因此我希望它從減去1股票中創建外部軟件系統所需的組件數量。錯誤更新詢問

這裏是我的查詢:

"UPDATE stock SET amount=amount-1 WHERE name = (SELECT p.c_name FROM pc_systems p WHERE p.name='Alienware');" 

我得到一個奇怪的錯誤,上面寫着:

「被用作表達式子查詢返回多行」將是,如果有人高興有幫助。

編輯:

我通過把一個 「IN」 我的查詢,而不是 「=」 解決了這個。最終代碼:

UPDATE stock SET amount=amount-1 WHERE name IN (SELECT p.c_name FROM pc_systems p  WHERE p.name='Alienware'); 

回答

1

由於您的子查詢返回的多個記錄,你不能使用這種語法。嘗試是這樣的:

UPDATE S 
SET S.amount=S.amount-1 
FROM Stock S 
INNER JOIN pc_systems p 
    ON S.name = p.c_name 
WHERE p.name='Alienware' 

或試試這個:

update stock 
set s.amount=s.amount-1 
from stock s 
inner join pc_systems p on S.name = p.c_name 
where p.name='Alienware' 
+0

我想這一點,但它說那個關係'不'存在。這看起來不像標準表示法tho,通常就像更新

SET = ... :) – John 2012-03-22 18:11:27

+0

我剛更新了我的答案與另一個版本 – Taryn 2012-03-22 18:17:18

+0

得到了錯誤「列參考」金額「不明確 線2:設置金額=量-1" 。試圖找出可能的錯誤。 – John 2012-03-22 18:29:28

3

這意味着這是什麼SQL返回超過1行。使它只返回1行。

SELECT p.c_name FROM pc_systems p WHERE p.name='Alienware' 
+0

這不會更新需要在股票的Alienware成分的量,但我明白你的意思 – John 2012-03-22 18:07:03