如何克服oracle中的IN子句问题

时间:2016-03-08 15:31:46

标签: oracle

我正在table2更新名为table1的表名列Active_status。但结果包含的问题超过1000.如何解决此问题。我正在使用此查询在ac#application.I听说我们可以使用临时表,如果是这样我怎么用或者有更好的方法。跟我的查询

UPDATE table2
SET Active_status = 'N',
 MODIFIED_DATE    = SYSDATE
    WHERE t2_SLNO    IN
      (SELECT t2_SLNO
      FROM table2
      LEFT JOIN table1
      ON table2.t2_NAME       = table1.t1_NAME
      WHERE table1.t1_NAME IS NULL
      )
    AND Active_status <> 'N';

修改 我正在进行这个修改。通过使用merge.But有一些情况,如table2包含一些死数据,我想使状态为'N',因为table1和table2的源是一个由其他团队公开的远程数据库。因此想到在我现有的MERGE操作之后完成这项工作

1 个答案:

答案 0 :(得分:1)

正如@aleksej建议的那样,你可以使用MERGE:

MERGE INTO table1 t
USING table2 s
ON(t.t1_NAME = s.t2_NAME)
WHEN NOT MATCHED UPDATE SET Active_status = 'N',
                            MODIFIED_DATE = sysdate 
WHERE t.Active_status <> 'N'

你可以改变你的更新工作:

UPDATE table1 t
SET t.Active_status = 'N',
    t.MODIFIED_DATE = sysdate
WHERE NOT EXISTS(SELECT 1 FROM table2 s
                 WHERE t.t1_NAME = s.t2_NAME)
  AND t.Active_status <> 'N'