Как использовать NOT EXISTS с составными ключами в SQL для вставки данных из POJO - PullRequest
8 голосов
/ 22 августа 2011

Я использую СУБД DB2.

Сценарий 1:

myTable имеет составной ключ (key1, key2), где key1 и key2 являются внешними ключами от yourTable.

Я хочу вставить новые данные из yourTable в myTable, но только если комбинация key1, key2 еще не существует в myTable.

insert into myTable(key1, key2, someData)
values(x, y, z)
where NOT EXISTS (want to check if composite key is not already present)

Сценарий 2:

Я помещаю данные в Java-объект из yourTable со свойствами data1, data2 и data.

Я хочу вставить вышеуказанные данные с проверкой, как в Сценарии1. data1 + data2 уже не должны присутствовать в myTable.

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

insert into myTable(key1, key2, data)
values(data1, data2, data)
where (data1 + data2 are already not present in myTable)

Как мне этого добиться?

Ответы [ 2 ]

11 голосов
/ 22 августа 2011
insert into mytable(...)
select ...
from yourtable y
left join mytable m
on y.key1 = m.key1 and y.key2 = m.key2
where m.key is null

или

insert into mytable(...)
select ...
from yourtable y
where not exists (select 1 from mytable m where y.key1 = m.key1 and y.key2 = m.key2)

для вашего второго сценария, он будет выглядеть аналогично приведенному выше запросу

insert into mytable(...)
select ...
where not exists (select 1 from mytable m where javakey1 = m.key1 and javakey2 = m.key2)
0 голосов
/ 23 августа 2011
insert into mySchema.NIK(DATA1, DATA2, DATA) select 'C','3','MY' FROM SYSIBM.DUAL where not exists (select 1 from mySchema.NIK A where 'C' = A.DATA1 and '3' = A.DATA2)

если данные 'c' '3' уже существуют, то приведенный выше запрос приведет к пустой таблице.

...