我首先要说我是新手。我有两个表(位置和资产)。位置表具有fac_id / bldg / location_code / loc_id,资产表具有fac_id / bldg / location_code / loc_id。我需要使用资产表中loc_id为null的位置表中的loc_id更新资产表loc_id。但是,需要在两个表中匹配fac_id / bldg / location_code以更新正确的loc_id。我有一个脚本,我继续得到错误。我已尝试过许多来自互联网研究的不同调整(加入,内部联接,合并,存在等等......)并且没有任何工作。在这个原始脚本上,我得到太多行错误或单行子查询返回多行。希望解决方案很简单,我不知道。
我感谢任何帮助,我的头因撞到墙上而受伤。
UPDATE asset b
SET b.loc_id = (SELECT DISTINCT l.fac_id, l.bldg, l.location_code, l.loc_id
FROM location l
WHERE upper(trim(b.fac_id))=upper(trim(l.fac_id))
AND upper(trim(b.bldg))=upper(trim(l.bldg))
AND upper(trim(b.location_code))=upper(trim(l.location_code))
)
WHERE b.loc_id IS NULL;
谢谢!
答案 0 :(得分:0)
最简单的解决方案是and rownum = 1
:
UPDATE asset b
SET b.loc_id = (SELECT l.loc_id
FROM location l
WHERE upper(trim(b.fac_id)) = upper(trim(l.fac_id)) AND
upper(trim(b.bldg)) = upper(trim(l.bldg)) AND
upper(trim(b.location_code)) = upper(trim(l.location_code)) AND
rownum = 1
)
WHERE b.loc_id IS NULL;
但是,这可能不是一个“真正的”解决方案。你应该弄清楚为什么你是多个匹配的行。也许你的相关条件或你的逻辑有问题。