Oracle更新命令:错误:ORA-00933:SQL命令未正确结束[重复]

hs1ihplo  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(120)

此问题已在此处有答案

Update statement with inner join on Oracle(15个回答)
11天前关闭
| uniqueID| Parcel_id|地址|
| --|--|--|
| 38077 |025 07 0 031.00| 410 ROSEHILL CT,Goodlettsville|
| 43076 |025 07 0 031.00|(空)|

UPDATE h 
SET address = COALESCE(h.address, h2.address)
FROM   housing h
       JOIN housing h2
         ON h.parcel_id = h2.parcel_id
WHERE  h.unique_id <> h2.unique_id
       AND h.address IS NULL;

我需要做的是填充空记录的地址字段,使用来自相同包裹ID但不同唯一ID的地址。
--选择查询当前通过填充空字段显示记录

SELECT h.unique_id,h.parcel_id,h2.parcel_id,h.address,h2.address, coalesce(h.address,h2.address) 
FROM housing h, housing h2 
WHERE h.parcel_id = h2.parcel_id
AND h.unique_id <> h2.unique_id AND h.address is null;

我试图更新值有相同的包裹ID,但地址列是空的,请建议是否有任何其他的方法,它或在我这里错了。
我希望这次我说清楚了。很抱歉有任何错误,这是我第一次在这里发帖。先谢了。

vbopmzt1

vbopmzt11#

以下列形式使用更新或合并:

update h set
  h.address = (select coalesce(h.address, h2.address)
               from housing h2
               where h2.parcel_id = h.parcel_id
                 and h2.unique_id <> h.unique_id
              )
where h.address is null;

merge into h
  using housing h2
  on (h2.parcel_id = h.parcel_id
      and h2.unique_id <> h.unique_id
     )
  when matched then update set
    h.address = coalesce(h.address, h2.address)
  where h.address is null;

不过,你同时指定了coalescewhere子句有点奇怪,因为:

  • where表示只更新h.address is null所在行,而
  • coalesce(h.address, h2.address)表示您应该将h2.address放入h.address如果h.address为null

因此,删除其中一个; coalesce可能是一个更好的选择(要删除),因为where会导致更少的行受到影响,因此性能可能会更好。

相关问题