在PLSql Server中使用Subquery更新查询



我比较了table1和table2的数据,并过滤了table1中不存在的数据。我想让两个表的行数相等。为此,我需要在table2中设置is_active = 0,其中table1中不存在数据。

例子::

UPDATE table2 
SET table2.is_active = 0 
WHERE (SELECT table2.user_name 
FROM table2 
WHERE table2.is_Active = 1 
AND table2.user_name NOT IN (SELECT table1.user_name 
FROM table1 
WHERE table1.is_Active = 1));
==table1==      ==table2==
'A', 'B', 'C'   'A', 'B', 'C'
'A', 'E', 'C'   'M', 'N', 'O'
'A', 'E', 'D'   'A', 'E', 'D'
'A', 'E', 'D'

在上面的例子中,表1和表2包含的数据相似,除了'M', 'N', 'O',我想将这一行设置为is_active = 0状态

对我来说,不存在的更新似乎是一种选择。

样本数据:

SQL> select * from table1;
COL1  COL2  COL3   IS_ACTIVE
----- ----- ----- ----------
a     b     c              1
a     e     c              1
a     e     d              1
SQL> select * from table2;
COL1  COL2  COL3   IS_ACTIVE
----- ----- ----- ----------
a     b     c              1
a     e     c              1
a     e     d              1
m     n     o              1   --> IS_ACTIVE should be set to 0

更新:

SQL> update table2 b set
2    b.is_active = 0
3    where not exists (select null from table1 a
4                      where a.col1 = b.col1
5                        and a.col2 = b.col2
6                        and a.col3 = b.col3
7                     );
1 row updated.

结果:

SQL> select * from table2;
COL1  COL2  COL3   IS_ACTIVE
----- ----- ----- ----------
a     b     c              1
a     e     c              1
a     e     d              1
m     n     o              0   --> IS_ACTIVE is set to 0
SQL>

相关内容

  • 没有找到相关文章

最新更新