2016-03-08 2 views
0

Я обновляю таблицу с именем table2 от table1 по имени столбца Active_status. Но проблема в результате содержит более 1000.Как решить эту проблему. Я использую этот запрос в приложении aC# .Я слышал, мы можем использовать временную таблицу, если это так, как я могу использовать или есть лучше way.followingis мой запросКак преодолеть проблему с предложением IN в oracle

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'; 

EDIT Я делаю эту модификацию everday.By используя merge.But там такие ситуации, как table2, содержат некоторые мертвые данные, которые я хочу сделать статусом «N», поскольку источник table1 и table2 является удаленной базой данных аза, которая подвергается каким-либо другим team.So додумалась сделать эту работу после моей существующей операции MERGE

+0

Посмотрите [MERGE] (https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm); возможно, это может решить проблему. – Aleksej

+2

В чем же проблема? – sagi

+2

Это не имеет ничего общего с C# или .NET – Paparazzi

ответ

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' 
+0

Почему бы не поставить Active_status <> 'N' в ON? – Paparazzi

+1

Поскольку MERGE не позволяет обновлять столбец, который находится в предложении ON. @Frisbee – sagi

+0

И что не так с моими запросами? @peter – sagi