您现在的位置:首页 > IT认证 > oracle认证 >

Oracle开发技术:Oracle删除重复记录的几种方式


Oracle开发技术:Oracle删除重复记录的几种方式 Oracle删除重复记录的几种方式   [html]   Oracle删除重复记录的几种方式   如果把一个文件多次导入数据库,可能会引入重复记录,那么有哪些方法可以删除重复记录呢?   REATE TABLE tbl_test(   SER_NO NUMBER,   FST_NM VARCHAR2(30),   DEPTID NUMBER,   CMNT VARCHAR2(30));   INSERT INTO tbl_test VALUES(1, 'aaaaa', 2004, 'xxx');   INSERT INTO tbl_test VALUES(2, 'bbbbb', 2005, 'yyy');   INSERT INTO tbl_test VALUES(1, 'aaaaa', 2004, 'xxx');   INSERT INTO tbl_test VALUES(1, 'aaaaa', 2004, 'xxx');   INSERT INTO tbl_test VALUES(3, 'ccccc', 2005, 'zzz');   INSERT INTO tbl_test VALUES(2, 'bbbbb', 2005, 'yyy');   1.Using MIN(rowid) 最常用的方法,但是数据量大的话执行会很长时间   DELETE FROM tbl_test   WHERE ROWID NOT IN (SELECT MIN (ROWID)   FROM tbl_test   GROUP BY ser_no, fst_nm, deptid, cmnt); 2.Using MIN(rowid) & Join 跟第一条差不多   DELETE FROM tbl_test t   WHERE t.ROWID NOT IN (SELECT MIN (b.ROWID)   FROM tbl_test b   WHERE b.ser_no = t.ser_no   AND b.fst_nm = t.fst_nm   AND b.deptid = t.deptid   AND b.cmnt = t.cmnt);   3.Using Subquery   DELETE FROM tbl_test   WHERE ser_no IN (SELECT ser_no FROM tbl_test GROUP BY ser_no, fst_nm, deptid, cmnt HAVING COUNT (*) > 1)   AND fst_nm IN (SELECT fst_nm FROM tbl_test GROUP BY ser_no, fst_nm, deptid, cmnt HAVING COUNT (*) > 1)   AND deptid IN (SELECT deptid FROM tbl_test GROUP BY ser_no, fst_nm, deptid, cmnt HAVING COUNT (*) > 1)   AND cmnt IN (SELECT cmnt FROM tbl_test GROUP BY ser_no, fst_nm, deptid, cmnt HAVING COUNT (*) > 1)   AND ROWID NOT IN (SELECT MIN (ROWID)   FROM tbl_test   GROUP BY ser_no, fst_nm, deptid, cmnt   HAVING COUNT (*) > 1)   4. Using Nested Subqueries   DELETE FROM tbl_test a WHERE (a.ser_no, a.fst_nm, a.deptid, a.cmnt) IN (SELECT b.ser_no, b.fst_nm, b.deptid, b.cmnt   FROM tbl_test b WHERE a.ser_no = b.ser_no AND a.fst_nm = b.fst_nm AND a.deptid = b.deptid AND a.cmnt = b.cmnt AND   a.ROWID > b.ROWID);   5. Using Analytic Fucntions: 对于大表这是最有效的方法   DELETE FROM tbl_test WHERE ROWID IN (SELECT rid FROM (SELECT ROWID rid,   ROW_NUMBER () OVER (PARTITION BY ser_no, fst_nm, deptid, cmnt ORDER BY ROWID) rn FROM tbl_test)WHERE rn <> 1);   6. CREATE-DROP-RENAME 对资源使用比较合理,特别对于大表。但是如果需要回滚则会产生大量undo日志信息。   CREATE TABLE tbl_test1 NOLOGGING AS SELECT tbl_test .*   FROM tbl_test tbl_test WHERE ROWID IN (SELECT rid   FROM (SELECT ROWID rid, ROW_NUMBER() OVER (PARTITION BY ser_no, fst_nm, deptid, cmnt ORDER BY ROWID) rn   FROM tbl_test) WHERE rn=1);   DROP TABLE tbl_test; --drop the original table with lots of duplicate   RENAME tbl_test1 TO tbl_test; -- your original table without duplicates.

闂侀潧妫岄崑锟�

闂侀潧妫岄崑锟�

闂侀潧妫欓崝鏇㈠储閵堝洦瀚婚柨婵嗘嫅缁憋綁鏌¢崟顐︻€楅柟铚傚嵆閹囧醇閻斿摜绉柣鐘叉搐閻°劌危閹达箑违闁跨噦鎷�
闂佸搫鐗滈崜娑㈡偟椤栫偞鐒鹃柕濞垮劚閻庤菐閸ワ絽澧插ù鐓庢嚇瀵爼濡烽敂鍓у煃婵炲瓨绮岀花鑲╄姳娴煎瓨鍤傞柡鍐ㄥ€荤粔褰掓煥濞戣櫕瀚�闁诲海鏁搁、濠偯归崱妯诲闁伙絽鏈悾鍗炃庨崶锝呭⒉濞寸厧鎳橀獮瀣箣濠婂嫮鎷ㄩ梺鍛婃⒐缁嬫帡鎯囨导鏉戝唨闁搞儯鍔嶉~鏍庨崶锝呭⒉濞寸厧鎳橀幆鍐礋椤愩垺鐦旀繝銏f硾鐎氬摜妲愰敓锟�闂佺懓鐡ㄩ崹鍐测堪閹寸姳鐒婂┑鐘叉搐濞呫垹霉閿濆棛鐭庨柍褜鍓欓幊鎰枔閹达附鍋嬮柛顐ゅ枑缂嶁偓闂佹垝鐒﹂妵鐐电礊閺冨牆绾ч柛鎰硶缁€锟�闁诲簼绲婚~澶愬垂濠婂嫮顩锋い鎺戝暞缁侇噣寮堕悙鍨珪婵炲牊鍨剁粚閬嶅焺閸愌呯婵犵鈧啿鈧懓锕㈡担鍓插殨闁稿本绻嶉崬鎾煙鐎涙ḿ澧繝鈧担鍦懝闁割煈鍋呯紞鈧梺鐟扮摠閻楃偟鎹㈠顑芥灃闁哄洦鐭换鍡涙煙椤撗冪仴妞ゆ洦鍓熷畷锝嗙節閸愨晩妲梺鑹伴哺濮婂鏌堥幘顔肩闁瑰瓨绮嶇划锕傛煥濞戞ɑ婀版繝鈧幍顔惧崥婵炲棗娴风粣妤冪磼閺傛鍎忕€规挸妫濆畷姘舵偐缂佹ḿ褰戦梺鎸庡喕閹凤拷闁诲海鏁搁幊鎾舵暜椤愶箑绀嗘繛鎴灻弫鍫曟倵绾拋娼愰柛銊︾矋缁傛帡顢楁担绋啃梺瑙勬緲缁绘垿寮鐣岊浄婵せ鍋撻柍褜鍓欓崐鍝ョ礊鐎n喗鍎嶉柛鏇ㄥ帎瑜版帗鐓€妞ゆ帒锕︾粈锟�闂佽壈椴稿濠氭焾閹绢喖妫橀柣鐔稿绾偓闂佹寧绋掑畝鎼佸磻閺嶃劎顩烽柨鐕傛嫹:webmaster@jscj.com闂侀潧妫岄崑鎾绘煟椤厾绁烽柣锔跨矙閺佸秹鏁撻敓锟�4008816886

相关文章

无相关信息
更新时间2022-03-13 11:18:58【至顶部↑】
联系我们 | 邮件: webmaster@jscj.com | 客服热线电话:4008816886(QQ同号) |  濠电姷鏁搁崕鎴犵礊閳ь剚銇勯弴鍡楀閸欏繘鏌i幇顕呮毌闁稿鎹囬悰顕€宕归鍙ョ棯婵犵數濮崑鎾绘煕閵夋垵鑻▓顐㈩渻閵堝棙顥嗘い鏂匡功閹广垽鏁撻敓锟�

付款方式留言簿投诉中心网站纠错二维码手机版

客服电话: