根据Oracle中的Rownum更新行

问题描述 投票:0回答:1

我在Oracle中有两个表

TableProducts

Product_Code
    BGU
    LSO
    MPA
    MPA4
    MPA5
    TPA
    UGU

对于此示例,现在我有7个值,但以后可能有9个值。

TableContacts

Product_CodeEmailPDF

[EmailPDF具有两个可能的值'N''Y'

我需要根据行数位置用Product_CodeEmailPDF字段的组合来填充TableContacts

Rownum = 1-> Product_Code='BGU'Email='N'PDF='N'

Rownum = 2-> Product_Code='BGU'Email='N'PDF='Y'

Rownum = 3-> Product_Code='BGU'Email='Y'PDF='N'

Rownum = 4-> Product_Code='BGU'Email='Y'PDF='Y'

Rownum = 5-> Product_Code='LSO'Email='N'PDF='N'

如果我有Product_Code的7个值,Email的2个值和PDF的2个值,那么我将需要填写(7 * 2 * 2)= 28行

如何在这种情况下创建和SQL更新TableContacts

oracle sql-update modulus rownum
1个回答
0
投票

部分地,要求没有意义。关系数据库中表中的行不会以任何方式进行排序,因此-表示要引用的行数是... strange。因此,我修改了contacts表并添加了另一列-rn-该列显示您的rownum

此外,此示例仅显示3个产品(不想输入所有产品)。后面的代码与这些产品的数量无关,并且无论如何都可以使用。

产品:

SQL> select * From products;

CODE
-----
BGU
LSO
MPA

插入联系人:

SQL> insert into contacts (rn, code, email, pdf)
  2  with temp as
  3    (select p.code, x.lvl
  4       from products p cross join (Select level lvl from dual connect by level <= 4) x
  5    )
  6  select t.lvl,
  7    t.code,
  8    case when t.lvl in (1, 2) then 'N'
  9         when t.lvl in (3, 4) then 'Y'
 10    end email,
 11    --
 12    case when t.lvl in (1, 3) then 'N'
 13         when t.lvl in (2, 4) then 'Y'
 14    end pdf
 15  from temp t;

12 rows created.

结果:

SQL> select * From contacts
  2  order by code, rn;

        RN CODE  E P
---------- ----- - -
         1 BGU   N N
         2 BGU   N Y
         3 BGU   Y N
         4 BGU   Y Y
         1 LSO   N N
         2 LSO   N Y
         3 LSO   Y N
         4 LSO   Y Y
         1 MPA   N N
         2 MPA   N Y
         3 MPA   Y N
         4 MPA   Y Y

12 rows selected.

SQL>
© www.soinside.com 2019 - 2024. All rights reserved.