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

与えられた条件を満たす多くの行のうちの1行を除くすべての行を更新するにはどうすればよいですか?

    テーブルの更新中は行の順序を気にしないので、 MINを使用するだけで済みます。 およびGROUPBY

    更新 colAでグループ化する必要があります およびcolC

    たとえば、

    セットアップ

    SQL> CREATE TABLE t
      2    (
      3      COlA VARCHAR2(12),
      4      COLB VARCHAR2(9),
      5      COLC VARCHAR2(5),
      6      COLD VARCHAR2(5),
      7      COLE VARCHAR2(1)
      8    );
    
    Table created.
    
    SQL> INSERT ALL
      2      INTO t (COlA, COLB, COLC, COLD, COLE)
      3           VALUES ('Equipment SI', 'ADD INFO', 'MERGE', 'Notes', 'Y')
      4      INTO t (COlA, COLB, COLC, COLD, COLE)
      5           VALUES ('Equipment SI', 'Active', 'MERGE', 'Notes', 'Y')
      6      INTO t (COlA, COLB, COLC, COLD, COLE)
      7           VALUES ('Equipment SI', 'ORIGINAL', 'MERGE', 'Notes', 'Y')
      8      INTO t (COlA, COLB, COLC, COLD, COLE)
      9           VALUES ('Fastening', 'ADD INFO', 'MERGE', 'Notes', 'Y')
     10      INTO t (COlA, COLB, COLC, COLD, COLE)
     11           VALUES ('Fastening', 'Active', 'MERGE', 'Notes', 'Y')
     12      INTO t (COlA, COLB, COLC, COLD, COLE)
     13           VALUES ('Electonics', 'ADD INFO', 'MERGE', 'Notes', 'Y')
     14      INTO t (COlA, COLB, COLC, COLD, COLE)
     15           VALUES ('Electonics', 'Active O', 'MERGE', 'Notes', 'Y')
     16      INTO t (COlA, COLB, COLC, COLD, COLE)
     17           VALUES ('Electonics', 'ORIGINAL', 'MERGE', 'Notes', 'Y')
     18      INTO t (COlA, COLB, COLC, COLD, COLE)
     19           VALUES ('Electonics', 'Nominated', 'MERGE', 'Notes', 'Y')
     20      INTO t (COlA, COLB, COLC, COLD, COLE)
     21           VALUES ('Fiber', 'ADD INFO', 'MULTI', 'Notes', 'Y')
     22      INTO t (COlA, COLB, COLC, COLD, COLE)
     23           VALUES ('Fiber', 'ADD INFO', 'KILO', 'Notes', 'Y')
     24  SELECT * FROM dual;
    
    11 rows created.
    
    SQL> COMMIT;
    
    Commit complete.
    

    テーブルデータ

    SQL> SELECT * FROM t;
    
    COLA         COLB      COLC  COLD  C
    ------------ --------- ----- ----- -
    Equipment SI ADD INFO  MERGE Notes Y
    Equipment SI Active    MERGE Notes Y
    Equipment SI ORIGINAL  MERGE Notes Y
    Fastening    ADD INFO  MERGE Notes Y
    Fastening    Active    MERGE Notes Y
    Electonics   ADD INFO  MERGE Notes Y
    Electonics   Active O  MERGE Notes Y
    Electonics   ORIGINAL  MERGE Notes Y
    Electonics   Nominated MERGE Notes Y
    Fiber        ADD INFO  MULTI Notes Y
    Fiber        ADD INFO  KILO  Notes Y
    
    11 rows selected.
    

    更新ステートメント

    SQL> UPDATE t
      2  SET colE         = 'N'
      3  WHERE ROWID NOT IN
      4    ( SELECT MIN(rowid) FROM t GROUP BY colA, colC
      5    );
    
    6 rows updated.
    

    確認しましょう

    SQL> SELECT * FROM t;
    
    COLA         COLB      COLC  COLD  C
    ------------ --------- ----- ----- -
    Equipment SI ADD INFO  MERGE Notes Y
    Equipment SI Active    MERGE Notes N
    Equipment SI ORIGINAL  MERGE Notes N
    Fastening    ADD INFO  MERGE Notes Y
    Fastening    Active    MERGE Notes N
    Electonics   ADD INFO  MERGE Notes Y
    Electonics   Active O  MERGE Notes N
    Electonics   ORIGINAL  MERGE Notes N
    Electonics   Nominated MERGE Notes N
    Fiber        ADD INFO  MULTI Notes Y
    Fiber        ADD INFO  KILO  Notes Y
    
    11 rows selected.
    
    SQL>
    


    1. MySQLでGROUPBYを使用して最新の行を選択します

    2. Oracleでこの動的更新を行うにはどうすればよいですか?

    3. SQLクエリからアプリケーションコードへのバックトレース?

    4. WindowsにPostgreSQL用のクライアントツールだけをインストールするにはどうすればよいですか?