我有两个实体STOCK(名称,金额)和PC_SYSTEMS(名称,c_name),我希望更新创建PC_system“Alienware”所需的组件,因此我希望它从组件数量中减去1 ,需要在库存中创建alienware系统。
这是我的疑问:
"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');
答案 0 :(得分:3)
这意味着此SQL返回的行数超过1行。这样做只返回1行。
SELECT p.c_name FROM pc_systems p WHERE p.name='Alienware'
答案 1 :(得分: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'