【发布时间】:2018-06-12 00:26:45
【问题描述】:
我正在尝试使用下面的查询在一个包含现有表的表上运行更新。代码列记录需要更新,但只更新其中的一部分。我的查询似乎有效,但任何应该留在代码列中的记录最终都被设置为 NULL。如何修改此查询以保持这些记录不变?
查询
update t1 x
set x.code =
(select code from
(select distinct address, city, prov, aflag, rcode from t2) y
where x.address = y.address and x.city = y.city and x.state = y.state and x.flag = y.flag)
where x.aflag like '%b%';
表 1:要更新的代码
t1
address city state flag code
123 aaa il b 400
567 bbb il b 400
345 bbb il b -500
789 ddd il b 600
546 ccc il b 700
表 2:用于更新 T1 的代码列
t2
address city state flag code
123 aaa il b -555
444 bbb il b -555
345 bbb il b -555
888 kkk il b -555
546 ccc il b -555
What the query currently outputs
current output
address city state flag code
123 aaa il b 400
444 bbb il b NULL
345 bbb il b -500
888 kkk il b NULL
546 ccc il b -700
我希望查询保留与更新表中没有匹配项的记录保持不变,如下所示
What I want
address city state flag code
123 aaa il b 400
444 bbb il b -555
345 bbb il b -500
888 kkk il b -555
546 ccc il b -700
谢谢!
【问题讨论】:
-
和 where 子句说明代码不为空的地方
-
你说你想更新 t1 但你显示的地址来自 t2 ??
标签: sql oracle sql-update