oracle SQL ISNULL()查询

qnakjoqk  于 2023-04-05  发布在  Oracle
关注(0)|答案(2)|浏览(126)
update a set PROPERTYADDRESS = ISNULL(a.PROPERTYADDRESS, b.PROPERTYADDRESS)
    from data a
    join data b
    on a.PARCELID = b.PARCELID
    and a.[ID] <> b.[ID]    
    where a.PROPERTYADDRESS is null

在Oracle SQL中,对于给定的代码,它显示错误:
从行开始时出错:25指挥官

update a   
set PROPERTYADDRESS = ISNULL(a.PROPERTYADDRESS, b.PROPERTYADDRESS)
    from data a
    join data b
    on a.PARCELID = b.PARCELID
    and a.[ID] <> b.[ID]    
    where a.PROPERTYADDRESS is null

命令行错误:27柱:5
错误报告- SQL错误:ORA-00933:SQL命令未正确结束

  1. 00000 -“SQL命令未正确结束”
  • 原因:
  • 行动:

基本上我认为它是不采取ISNULL()作为一个函数需要帮助来解决这个问题

iugsix8n

iugsix8n1#

  1. []在Oracle的SQL方言中不是有效语法;
  2. UPDATE中的联接也不是有效的Oracle语法(没有子查询);和
  3. ISNULL不是一个有效的Oracle函数(使用ISNULL(a.PROPERTYADDRESS, b.PROPERTYADDRESS)没有意义,因为您已经过滤了a.PROPERTYADDRESS is null,因此您知道a的值是什么)。
    您可以用途:
MERGE INTO data a
USING data b
ON (   a.PARCELID =  b.PARCELID
   AND a.ID       <> b.ID       )
WHEN MATCHED THEN
  UPDATE
  SET   a.PROPERTYADDRESS = b.PROPERTYADDRESS
  WHERE a.PROPERTYADDRESS IS NULL
  AND   b.PROPERTYADDRESS IS NOT NULL;

fiddle

uz75evzq

uz75evzq2#

ISNULL()函数特定于SQL Server,在Oracle中不受支持。您可以在Oracle中使用ISNULL()等效的NVL函数

update (select a.PROPERTYADDRESS, b.PROPERTYADDRESS as NEW_PROPERTYADDRESS
    from data a
    join data b on a.PARCELID = b.PARCELID and a.ID <> b.ID
    where a.PROPERTYADDRESS is null)
    set PROPERTYADDRESS = NVL(PROPERTYADDRESS, NEW_PROPERTYADDRESS);

相关问题