使用where条件返回多个值来更新行

时间:2017-10-03 03:40:14

标签: mysql sql database oracle

考虑以下两个表

表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');"因为它提供了多个价值观。

请告诉我如何解决此问题。

2 个答案:

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