SQL
-- 準備
CREATE TABLE TABLE_NAME1
(
NUM1 NUMBER(6)
) ;
INSERT INTO TABLE_NAME1(NUM1) VALUES(10) ;
INSERT INTO TABLE_NAME1(NUM1) VALUES(10) ;
INSERT INTO TABLE_NAME1(NUM1) VALUES(10) ;
INSERT INTO TABLE_NAME1(NUM1) VALUES(20) ;
INSERT INTO TABLE_NAME1(NUM1) VALUES(20) ;
INSERT INTO TABLE_NAME1(NUM1) VALUES(30) ;
INSERT INTO TABLE_NAME1(NUM1) VALUES(30) ;
INSERT INTO TABLE_NAME1(NUM1) VALUES(40) ;
COMMIT ;
-- テーブルの内容を確認する。
SELECT T1.NUM1
FROM TABLE_NAME1 T1
ORDER BY T1.NUM1 ;
NUM1
-------------
10
10
10
20
20
30
30
40
8行が選択されました。
SQL
-- このデータで NUM1 について同じ値が複数行あるものについて1行だけ残して、重複するデータをDELETEするSQLの書き方。
DELETE FROM TABLE_NAME1
WHERE ROWID NOT IN
(
SELECT MIN(ROWID) FROM TABLE_NAME1 T1 GROUP BY T1.NUM1
-----
) ;
4行が削除されました。
COMMIT ;
-- もう一度、テーブルの内容を確認する。
SELECT T1.NUM1
FROM TABLE_NAME1 T1
ORDER BY T1.NUM1 ;
NUM1
----------
10
20
30
40
時々未熟なプログラマーがROWIDをPRIMARY KEYに使っているのを見かけるが、UPDATEを実行して行移行(元のROWIDとは変わってしまう)が起きたり、
exp/imp or expdp/impdp で当然ROWIDが変わってしまい、破綻するのを何度みたことか。