ОШИБКА :: ОТКАЗ ОТ ОТВЕТА В ЗАЯВЛЕНИИ УДАЛЕНИЯ - PullRequest
1 голос
/ 15 сентября 2011

У меня есть требование, что я хочу, чтобы строки, выбранные на основе условия из таблицы A и таблицы B., должны быть удалены.

Например, EMP и EMP1 - это две таблицы

Merge into emp1 a 
using (select * from emp) b 
  on (a. empno =b.empno)
WHEN MATCHED THEN DELETE
where(b.LOC='NEW YORK');

Приведенный выше запрос приводит к ошибке.Если я использую Where exists, все строки удаляются в таблице A, что не является правильным решением.

delete from emp1 a 
where exists
      ( select null 
        from emp b 
        where a. empno =b.empno 
          and b.LOC='NEW YORK' 
      );

Пожалуйста, предложите

Ответы [ 2 ]

3 голосов
/ 15 сентября 2011
DELETE FROM emp1 a 
WHERE a.empno IN 
      ( SELECT b.empno 
        FROM emp b 
        WHERE b.LOC = 'NEW YORK' 
      );
0 голосов
/ 15 сентября 2011

Я не знаком с оператором MERGE, но скажу, что emp b неправильно объявлена, поскольку b находится за скобками.

Кроме того, я бы предложил сначала создать представление (или временно присоединенную таблицу), чтобы увидеть, какие элементы совпадают, перед выполнением команды DELETE. Затем вы можете использовать DELETE на основе представления и легко удалять из обеих таблиц.

...