2013-02-27 70 views
0
UPDATE 
    TABLE1 a, 
    TABLE2 b 
SET 
    a.COL1 = 'VALUE' 
WHERE 
    a.FK = b.PK 
    AND b.COL2 IN ('A subquery') 

如果我使用此更新语句,并且IN子句中的子查询未返回任何行,则会出现错误。我如何避免这种情况? (Oracle 10g中)使用in子句更新表错误

回答

0

你可能可以重写这一个EXISTS查询,这取决于你的子查询的具体细节:

UPDATE TABLE1 a, TABLE2 b SET a.COL1 = 'VALUE' 
WHERE a.FK = b.PK AND EXISTS (select 1 from OTHERTABLE O where B.COL2=O.COL2) 
0
UPDATE 
    TABLE1 a 
SET 
    a.COL1 = 'VALUE' 
WHERE 
    a.FK IN (SELECT b.PK FROM b WHERE b.COL2 in ....) 
+0

不要忘了'a.FK = b.PK'这里 - 这已被添加到您的子查询 – Trinimon 2013-02-27 18:17:47

+0

我认为这个问题是暗示将''A subquery''实际上是一个'SELECT'声明。 – egrunin 2013-02-27 18:20:16

0

是在引号中的子查询?

UPDATE 
    TABLE1 a, 
    TABLE2 b 
SET 
    a.COL1 = value 
WHERE 
    a.FK = b.PK 
    AND b.COL2 IN (
       SELECT col2 
       FROM ... 
       WHERE ... 
       ) 
+0

不,它不是,得到我的答案,并感谢您的答复 – 2013-02-28 15:48:06