【发布时间】:2015-04-02 04:37:03
【问题描述】:
我有一个类似的更新查询
update employees
set salary = salary - (select sum(salary) from employees where manager_id in (101,102))
where employee_id = 105;
上面的 sql 工作正常,但下面的 sql 正在更新 NULL 而不是 value。
UPDATE table1 a
SET a.col1 = a.col1 - (SELECT SUM(b.col2)
FROM table2 b
WHERE b.col3 = 'AA'
AND b.col4 = '1234'
AND b.col5 = '123456789'
AND b.col6 = 'O'
AND b.col7 IN ( 1, 2, 3, 4 ))
WHERE a.col3 = 'AA'
AND a.col4 = '2313'
AND a.col5 = '987654321';
有人知道原因吗?
如果工资值中有一些 NULL 值,它会更新 NULL。 (我知道它不会,因为内部查询返回一个数字值)。
如果我硬编码内部查询的值,它工作正常,但如果我使用绑定参数则失败。 (但是,无论是硬编码还是使用绑定参数时,都会返回一个数值。)
我似乎不知道这个简单的查询有什么问题。
【问题讨论】:
-
by 这里是原始sql
UPDATE TABLE1 a SET a.COL1 = a.COL1 - (SELECT SUM(b.COL2) FROM TABLE2 b WHERE b.COL3 = 'AA' AND b.COL4 = '1234' AND b.COL5 = '123456789' AND b.COL6 = 'O' AND b.COL7 IN (1,2,3,4) ) WHERE a.COL3 = 'AA' AND a.COL4 = '2313' AND a.COL5 = '987654321' ; -
最好在问题本身中添加这些详细信息,而不是评论。我已经编辑了你的问题,这次为你添加了。
-
感谢先生的帮助。我会牢记这一课。
-
关于您的问题,您可以使用 NVL,这样它只有在 NOT NULL 否则不会更改列时更新。看我的回答。
标签: sql oracle sql-update