Oracle Equivalent to MySQL INSERT IGNORE?

Мне нужно обновить запрос, чтобы он проверял отсутствие повторяющейся записи перед вставкой. В MySQL я могу просто использовать INSERT IGNORE, чтобы при обнаружении повторяющейся записи она просто пропускала вставку, но я не могу найти эквивалентный вариант для Oracle. Есть предложения?

23
задан Bad Programmer 17 February 2012 в 16:57
поделиться

4 ответа

Другой вариант

Insert into my_table (student_id, group_id)
select distinct p.studentid, g.groupid 
from person p, group g
where NOT EXISTS (select 1
                 from my_table a
                 where a.student_id = p.studentid
                 and a.group_id = g.groupid)

или вы можете сделать

Insert into my_table (student_id, group_id)
select distinct p.studentid, g.groupid 
from person p, group g
MINUS
select student_id, group_id
from my_table 
4
ответ дан 29 November 2019 в 01:06
поделиться

Если вы на 11g, вы можете использовать подсказку IGNORE_ROW_ON_DUPKEY_INDEX :

SQL> create table my_table(a number, constraint my_table_pk primary key (a));

Table created.

SQL> insert /*+ ignore_row_on_dupkey_index(my_table, my_table_pk) */
  2  into my_table
  3  select 1 from dual
  4  union all
  5  select 1 from dual;

1 row created.
21
ответ дан 29 November 2019 в 01:06
поделиться

Как насчет простого добавления индекса с любыми полями, в которых нужно проверить наличие дупликов, и сказать, что он должен быть уникальным? Сохраняет проверку на чтение.

0
ответ дан 29 November 2019 в 01:06
поделиться

еще один вариант «где не существует», использующий дуальные ...

insert into t1(id, unique_name)
  select t1_seq.nextval, 'Franz-Xaver' from dual 
    where not exists (select 1 from t1 where unique_name = 'Franz-Xaver');
0
ответ дан 29 November 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: