用于协调的 SQL 语句

2023-12-19

给出以下架构:

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 语句,该语句将通过协调 TBL1 和 TBL2 中的相等 MATCH_CRITERIA 来生成结果。

鉴于以下内容将起作用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 分钟)。


这个怎么样:

  INSERT INTO TBL_RESULT (ID, TBL1_ID, TBL2_ID) 
  SELECT seq_tbl_result.nextval,t1.id,t2.id 
  FROM
  (SELECT t1.match_criteria,t1.id, row_number() OVER (PARTITION BY t1.match_criteria ORDER BY t1.id) rn 
   FROM tbl1 t1) t1,  
  (SELECT t2.match_criteria,t2.id, row_number() OVER (PARTITION BY t2.match_criteria ORDER BY t2.id) rn 
   FROM tbl2 t2) t2
  WHERE t1.match_criteria=t2.match_criteria AND t1.rn=t2.rn

注意:假设两个表中每个匹配集中的行数相等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于协调的 SQL 语句 的相关文章

随机推荐