sql >> データベース >  >> RDS >> Oracle

Oracleの複数更新クエリ

    以下は、ITEM_CODEが1つのDEPARTMENT_CODEにのみ割り当てられていることを前提としています。これは、単純であり、それ以上のビジネスルールを指定していないためです。この仮定が間違っている場合は、それに応じてロジックを調整する必要があります。

    COMPETITOT.COMPETITOR_CODEの既存の値が信頼できないというあなたの要件も取り入れました。

    このテスト日を考えると:

    SQL> select * from competitor
      2  /
    
    STORE_CODE  ITEM_CODE DEPARTMENT_CODE COMPETITOR
    ---------- ---------- --------------- ----------
            11     912003              14 01
            11     912003              14 04
            11     912003              14 03
            11     912004              14 01
            11     912004              14 02
            11     912004              14 04
            11     914001              14 01
            11     914001              14 02
            11     914001              14 05
    
    9 rows selected.
    
    SQL>
    

    分析ROW_NUMBER()を使用して、COMPETITOR_CODEに必要なハンドルを生成できます。

    SQL> update competitor c
      2  set competitor_code =
      3          (select decode (dr
      4                         , 1, 'Comp_1'
      5                         , 2, 'Comp_2'
      6                         , 3, 'Comp_3')
      7             from ( select row_number() over ( partition by x.item_code
      8                                                  order by x.rowid ) as dr
      9                           , x.rowid as row_id
     10                    from competitor x
     11                    where x.item_code in ( select item_code
     12                                           from item
     13                                           where  department_code = 14 ) ) l
     14             where c.rowid = l.rowid )
     15  /
    
    9 rows updated.
    
    SQL>
    

    そして、これは望ましい結果です(ビジネスルールへの追加を除く):

    SQL> select * from competitor
      2  /
    
    STORE_CODE  ITEM_CODE DEPARTMENT_CODE COMPETITOR
    ---------- ---------- --------------- ----------
            11     912003              14 Comp_1
            11     912003              14 Comp_2
            11     912003              14 Comp_3
            11     912004              14 Comp_1
            11     912004              14 Comp_2
            11     912004              14 Comp_3
            11     914001              14 Comp_1
            11     914001              14 Comp_2
            11     914001              14 Comp_3
    
    9 rows selected.
    
    SQL>
    



    1. MySQLエラー-#1062-キー2の重複エントリ''

    2. 各グループで最高

    3. Eclipselinkを使用してOracleDBからデータをフェッチするのに長い時間がかかる

    4. 私のMacでのpythonmysqldberr:ライブラリがロードされていません:@ rpath / libmysqlclient.21.dylib