db2 - 在不同的表上使用 select 更新批量行
Posted
技术标签:
【中文标题】db2 - 在不同的表上使用 select 更新批量行【英文标题】:db2 - Bulk rows update with select on different tables 【发布时间】:2021-01-20 08:21:00 【问题描述】:我想根据以下条件为多行更新一列 - 我只想为这些行更新文件 abhipsha/AUDUSERF 的 AUUSRTX 列
WHERE AUDUSERF.AUUSRTP <> 'USR' and AUDUSERF.AUUSRTP <> 'usr'
并且需要更新的值必须来自匹配用户 id 的 usrprffil 中的 usrprffil.uptext 。两个表的用户id如下
usrprffil.upuprf = auduserf.auusrid
有人可以帮忙解决这个要求的正确查询吗?
我写了以下 3 个查询,但我收到错误,因为第一个和第二个查询的“SELECT 多行的结果” 查询 1 -
update abhipsha/auduserf
set AUUSRTX = (
SELECT usrprffil.uptext
from usrprffil inner join
abhipsha/auduserf
on upuprf =auusrid WHERE AUDUSERF.AUUSRTP <> 'USR'
and auduserf.auusrtp <> 'usr' and auusrid = usrprffil.upuprf)
查询 2 -
update abhipsha/auduserf set AUUSRTX =
(SELECT uptext fROM usrprffil inner
join abhipsha/auduserf
on usrprffil.UPUPRF = auduserf.AUUSRID
WHERE
usrprffil.UPUPRF in (
SELECT AUUSRID FROM abhipsha/auduserf
WHERE
AUUSRTP <> 'USR' and AUUSRTP <> 'usr'
)
)
对于我得到的第三个查询 - 空值错误 查询 3 -
update abhipsha/auduserf
set auduserf.AUUSRTX = (
select UPTEXT
from usrprffil
WHERE usrprffil.UPUPRF = auduserf.AUUSRID
and usrprffil.UPUPRF in
(SELECT AUUSRID FROM abhipsha/auduserf
WHERE AUUSRTP <> 'USR' and AUUSRTP <> 'usr')
and uptext <> ' ' and
uptext is not null )
AUUSRTX 列或变量中不允许有 Null 值。
【问题讨论】:
你说的是“文件”。什么 Db2 平台和版本? 【参考方案1】:试试这个:
update abhipsha/auduserf a
set AUUSRTX =
COALESCE
(
(
SELECT min(u.uptext)
from usrprffil u
WHERE a.auusrid = u.upuprf
)
, AUUSRTX
)
WHERE a.AUUSRTP NOT IN ('USR', 'usr')
注意事项:
min
函数用于不从子选择返回多行。
如果子选择没有返回任何行,AUUSRTX
列值保持不变。
当然,你可以根据自己的需要调整上面的逻辑。
【讨论】:
以上是关于db2 - 在不同的表上使用 select 更新批量行的主要内容,如果未能解决你的问题,请参考以下文章