问题描述
我想根据以下条件更新多行的列 - 我只想为这些行更新文件 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'
)
)
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 )
列或变量 AUSRTX 中不允许有空值。
解决方法
试试这个:
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
列值保持原样。
当然,您可以根据自己的需要调整上述逻辑。