Учитывая приведенную ниже схему:
create table TBL1 (ID varchar2(100) primary key not null, MATCH_CRITERIA varchar2(100));
create table TBL2 (ID varchar2(100) primary key not null, MATCH_CRITERIA varchar2(100));
create table TBL_RESULT (ID varchar2(100) primary key not null, TBL1_ID varchar2(100), TBL2_ID varchar2(100));
create unique index UK_TBL_RESULT_TBL1_ID on TBL_RESULT(TBL1_ID);
create unique index UK_TBL_RESULT_TBL2_ID on TBL_RESULT(TBL2_ID);
create sequence SEQ_TBL_RESULT;
insert into TBL1 VALUES('1', '1');
insert into TBL1 VALUES('2', '1');
insert into TBL1 VALUES('3', '1');
insert into TBL2 VALUES('4', '1');
insert into TBL2 VALUES('5', '1');
insert into TBL2 VALUES('6', '1');
Мне нужен оператор SQL, который выдаст результат путем согласования равных MATCH_CRITERIA из TBL1 и TBL2.
Следующеебудет работать, если отсутствует ограничение UNIQUE .Однако нам нужны уникальные ограничения в нашем приложении.
insert into TBL_RESULT (ID, TBL1_ID, TBL2_ID)
select SEQ_TBL_RESULT.nextval, TBL1.ID, TBL2.ID
from TBl1, TBL2
where TBL1.MATCH_CRITERIA = TBL2.MATCH_CRITERIA;
Пример вывода TBL_RESULT
| ID | TBL1_ID | TBL2_ID |
| '1' | '1' | '5' |
| '2' | '2' | '4' |
| '3' | '3' | '6' |
Примечание: это не 'Не имеет значения, соответствует ли «1» «4» или «6».Пока MATCH_CRITERIA из обеих таблиц одинаковы, а полученная таблица имеет уникальные TBL1_ID и TBL2_ID.
Обратите внимание, что мы вставляем миллион записей из TBL1 и еще миллион записей из TBL2.Таким образом, последовательная вставка с использованием PL / SQL недопустима, если она не может выполняться очень быстро (менее 15 минут).