oracle update更新语句

        我将整理后的excel表格供应商Email地址数据导入到专门建的临时“表AAA_EMAIL”(字段有org,pri,email,sita3),为了更新现有“供应商联系表organisationcomm”中的部分记录的相关字段(email,sita3),两张表采用联合主键org + pri 确定为唯一记录。表AAA_EMAIL共有206条记录,我做了与表organisationcomm的连接,显示有166条在表organisationcomm记录中是存在的,只需更新email,sita3两字段就行。另外40条则需要插入到表organisationcomm中。

        我打算分两步做,第一步先更新表AAA_EMAIL在表organisationcomm中已有的记录,第二步做新增操作。更新操作,我想起上回做执行更新SQL语句时,Oracle会把条件匹配的记录做相应更新,但是找不到相应条件匹配的记录其字段却会被清空!!!  之前上网搜过,了解这是Oracle的特点,这个特点让我们写update语句都很麻烦。我测了如下的SQL语句,果然显示1886条记录被更新,1886条是organisationcomm表的记录总数,而按道理说应该只更新166条才对。

update organisationcomm o
   set (email, sita3) =
       (select t.email, t.sita3
          from AAA_EMAIL t
         where trim(t.org) = trim(o.organisation)
           and trim(t.pri) = trim(o.priority))
——更新了1886条记录——

我知道要在后面再加个where …… 条件才能不会更新清空其他的记录,可惜不太知道where后条件该怎么写,汗~ 求助同事,问题搞定。加上where后整个SQL语句如下:

update organisationcomm o
   set (email, sita3) =
       (select t.email, t.sita3
          from AAA_EMAIL t
         where trim(t.org) = trim(o.organisation)
           and trim(t.pri) = trim(o.priority))

 where exists (select 1
          from AAA_EMAIL t
         where trim(t.org) = trim(o.organisation)
           and trim(t.pri) = trim(o.priority))

——更新了166条记录——

插入语句类似:

insert into organisationcomm o select t.org,t.pri,null,null,null,t.email,null,null,t.sita3,null,null,1,sysdate,16530
  from AAA_EMAIL t
 where not exists (select 1
          from organisationcomm o
         where trim(t.org) = trim(o.organisation)
           and trim(t.pri) = trim(o.priority))

你可能感兴趣的:(oracle update更新语句)