トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

10-92 RowNumでスカラー副問い合わせ

SQLパズル

TBL_A               TBL_B
ITEM01  ITEM10      ITEM07  ITEM03
------  ------      ------  ------
  織田       1           1  信長
  徳川       2           1  信長
  豊臣       3           4  光秀
  明智       4

TBL_AのITEM01に、
TBL_AとTBL_Bを、
TBL_A.ITEM10 = TBL_B.ITEM07
を結合条件として紐付けた、TBL_BのITEM03を文字列結合させた値(ハイフンも文字列結合)
で更新する

結合条件を満たすデータが複数ある場合は、
任意の1レコードと結合させる

更新結果
TBL_A
ITEM01       ITEM10
-----------  ------
  織田-信長  1
  徳川       2
  豊臣       3
  明智-光秀  4


データ作成スクリプト

create table TBL_A(
ITEM01 varchar2(10),
ITEM10 number(1));

insert into TBL_A values('織田',1);
insert into TBL_A values('徳川',2);
insert into TBL_A values('豊臣',3);
insert into TBL_A values('明智',4);

create table TBL_B(
ITEM07 number(1),
ITEM03 varchar2(10));

insert into TBL_B values(1,'信長');
insert into TBL_B values(1,'信長');
insert into TBL_B values(4,'光秀');
commit;


SQL

update TBL_A a
set ITEM01 = ITEM01 || '-'
          || (select b.ITEM03
                from TBL_B b
               where b.ITEM07 = a.ITEM10
                 and RowNum = 1)
where exists(select 1 from TBL_B b
              where b.ITEM07 = a.ITEM10);


解説

RowNumで件数を1件のみとして、
スカラー副問い合わせにしてます