考虑以下两个表
表A
ID | Name | Price | Size
1 aaa 10 L
2 bbb 12 L
3 ccc 15 L
4 ddd 20 XL
表B
ID | Type
1 X
2 X
3 Y
4 Z
现在我想将表A的price属性更新1%,其中大小为L且Type为X.我写了这个更新语句
UPDATE A SET price = price * 1.01
WHERE size = 'L' AND id = (SELECT id FROM B WHERE type = 'X');
但是这给了我
ORA-01427:单行子查询返回多个行错误。
我知道问题出在" id =(SELECT id FROM B WHERE type =' X');"因为它提供了多个价值观。
请告诉我如何解决此问题。
答案 0 :(得分:2)
此选择返回2行
SELECT id FROM B WHERE type = 'X'
结果
ID | Type
1 X
2 X
因此,如果将值与select返回多行
进行比较,请使用IN
UPDATE A
SET price = price * 1.01
WHERE size = 'L'
AND id IN (SELECT id FROM B WHERE type = 'X');
答案 1 :(得分:0)
从A a更新SET a.price = a.price * 1.01 在a.id = b.id上的内部联接B b,其中b.type =' X'和a。尺寸=' L' ;