Найти дубликаты в таблице 2 и вернуть обратно запись на основе идентификатора - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь сделать запрос на удаление записи в таблице 1 на основе дубликатов записей, найденных в таблице 2. id является общей связью между этими двумя таблицами. База данных является оракулом. Я новичок в написании запросов, и ниже приведен запрос, который я придумал, который не работает. Кто-нибудь может предложить, пожалуйста?

Я на самом деле пытаюсь удалить запись на основе идентификатора в таблице 1 при условии, что в таблице 2 есть дубликаты записей для этого идентификатора, а также еще один столбец? Ниже приведено сообщение об ошибке, которое я получаю. Я действительно не уверен, является ли запрос точным или вам нужно переписать весь запрос?

«неверный оператор SQL» - ORA-00900

    DELETE TABLE AS m WHERE m.id IN 
   (SELECT id from table2 t WHERE ROWID > 
(SELECT MIN(ROWID) FROM table2 r WHERE t.column2 = r.column2);

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Вы бы нашли дубликаты как-нибудь. Это немного неясно, но возможно:

select t2.column2, count(*)
from table2 t2
group by t2.column2
having count(*) >= 2;

Затем вы можете поместить это в delete:

delete from m
    where m.id in (select t2.column2
                   from table2 t2
                   group by t2.column2
                   having count(*) >= 2
                  );
0 голосов
/ 05 января 2019

Вы можете попробовать следующее (используйте только tab в качестве таблицы в выписке):

create table tab ( id int, val int );
insert into tab values(1 ,331);
insert into tab values(1 ,332);
insert into tab values(2 ,333);
insert into tab values(2 ,333);

select * from tab;

ID  VAL
1   331
1   332
2   333
2   333

delete tab a
 where
   rowid >
       (select min(rowid)
          from tab b
         where b.id=a.id
         group by b.id);      
select * from tab;      

ID  VAL
1   331
2   333

Демонстрация sqlfiddle

В качестве примечания: table является зарезервированным ключевым словом в Oracle и не может быть именем таблицы, "table" может использоваться альтернативно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...