更新查询出错

时间:2012-03-22 17:50:13

标签: postgresql

我有两个实体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');

2 个答案:

答案 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'