更新时的Oracle SQL MERGE 2 SELECT语句

cyvaqqii  于 2023-05-16  发布在  Oracle
关注(0)|答案(1)|浏览(139)

我需要通过引用另一个SELECT中的列值和该列的一些常量来更新一个表。我想在checkA为NULL且ID与TABLEB列ID匹配时更新TABLEA checkA和checkB列,并在TABLEA ID = 3时更新
上面的SQL没有从TABLEA返回ID为1和3的行

TABLEA

ID NAME    STATE   checkA   checkA
1   John    VA      null     null
2   SEAN    MD      null     null
3   CARL    SD      null     null

TABLEB
ID   ROLL_ID
1     01


UPDATE TABLEA tb  SET checkA = 'modified' ,checkA = 'modified'  where checkA is NULL AND
ID in 
(select DISTINCT ab.ID fRom  TABLEB ab where ab.ROLL_ID IN 
( 01 ) )

UNION

 select DISTINCT ID from TABLEA tbl WHERE ID in (3) AND  where checkA is NULL
5us2dqdw

5us2dqdw1#

如果您修复了语法(和其他)错误,则更新将起作用。
样本数据:

SQL> select * from tablea;

        ID NAME ST CHECKA
---------- ---- -- ---------------
         1 John VA
         2 Sean MD
         3 Carl SD

SQL> select * from tableb;

        ID RO
---------- --
         1 01

更新,已修复:

SQL> update tablea tb
  2    set checka = 'modified'
  3  where checka is null
  4    and id in
  5      (select distinct ab.id
  6         from  tableb ab
  7         where ab.roll_id in ( '01' )
  8       union
  9       select distinct id
 10         from tablea tbl
 11         where id in (3)
 12           and checka is null
 13      );

2 rows updated.

结果:

SQL> select * from tablea;

        ID NAME ST CHECKA
---------- ---- -- ---------------
         1 John VA modified
         2 Sean MD
         3 Carl SD modified

SQL>

请注意,表中不能有两个同名的列(这是示例数据和代码所建议的)。

相关问题