最近のトラックバック

最近のコメント

2017年1月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
無料ブログはココログ

SQL

2009年4月22日 (水)

重複行の削除(rowidを使ったやり方)

これがその1(極値関数の利用)

DELETE FROM Products P1
WHERE rowid < ( SELECT MAX(P2.rowid)
                   FROM Products P2
                  WHERE P1.name = P2. name
                    AND P1.price = P2.price ) ;

EXISTSを使ったパターン(非等値結合の利用)

DELETE FROM Products P1
WHERE EXISTS ( SELECT * FROM Products P2
                 WHERE P1.name = P2.name
                   AND P1.price = P2.price
                   AND P1.rowid < P2.rowid );

つまりは、重複している行のうち、一番デカイROWID以外のレコードは削除!ってことです

再帰クエリー

かなりウカツだったんですが、いつの間にやらSQLServerでは使えるようになっていたのですな!

[TSQL]再帰クエリ
再帰クエリその2
再帰SQL — Let's Postgres

Oracleでは、共通表式のWITH句は使えますが、WITH RECURSIVEによる再帰SQLはできませんでしたね。
かろうじてCONNECT BYによる階層問い合わせが出来ましたが、件数多いと全然帰ってこなかったんで、今までほとんど遣ったことないです。