Dev@Free

          zJun's Tech Weblog

          Oracle SQL 3則

          • 如果存在就更新,不存在就插入用一個語句實現
          MERGE? INTO ?t_mg?a
          USING?(
          SELECT ? ' the?code ' ?code,? ' the?name ' ?NAME? FROM
          ?dual)?b
          ON ?(a.code? =
          ?b.code)
          WHEN ?MATCHED? THEN

          UPDATE ? SET ?a.NAME? = ?b.NAME
          WHEN ? NOT ?MATCHED? THEN

          INSERT ?(code,?NAME)? VALUES ?(b.code,?b.NAME);
          • 分頁算法

          SELECT ? *
          FROM ?( SELECT ?a. * ,?ROWNUM?rn
          FROM ?( SELECT ? * ? FROM ?t_employees? ORDER ? BY
          ?first_name)?a
          WHERE ?ROWNUM? <= ? 500
          )
          WHERE ?rn? > ? 480 ?;

          • 抽取/刪除重復記錄

          1) 部分字段重復數據的刪除

          delete ? from ?表名?a?
          where ?a.rowid? !=
          ?
          (
          select ? max (b.rowid)? from
          ?表名?b?
          where ?a.字段1? = ?b.字段1? and
          ?
          a.字段2?
          =
          ?b.字段2?
          )

          上面語句的執行效率是很低的,可以考慮建立臨時表,講需要判斷重復的字段、rowid插入臨時表中,然后刪除的時候在進行比較。

          create ? table ?臨時表? as ?
          select ?a.字段1,a.字段2, MAX (a.ROWID)?dataid? from ?正式表?a? GROUP ? BY
          ?a.字段1,a.字段2;
          delete ? from
          ?表名?a?
          where ?a.rowid? !=
          ?
          (
          select ?b.dataid? from
          ?臨時表?b?
          where ?a.字段1? = ?b.字段1? and
          ?
          a.字段2?
          =
          ?b.字段2?
          )

          2) 完全重復記錄的刪除

          用下面語句獲取到去掉重復數據后的記錄:

          select ? distinct ? * ? from ?表名

          可以將查詢的記錄放到臨時表中,然后再將原來的表記錄刪除,最后將臨時表的數據導回原來的表中。如下:

          CREATE ? TABLE ?臨時表? AS ?( select ? distinct ? * ? from ?表名);
          drop ? table
          ?正式表;
          insert ? into ?正式表?( select ? * ? from
          ?臨時表);
          drop ? table ?臨時表;

          posted on 2006-10-10 16:49 zJun's帛羅閣 閱讀(1064) 評論(2)  編輯  收藏 所屬分類: 數據庫

          評論

          # re: Oracle SQL 3則 2006-10-24 09:58 冰川

          可以解釋一下你的分頁算法嗎?
          沒看明白...  回復  更多評論   

          # re: Oracle SQL 3則 2006-11-17 09:55 zjun

          @冰川
          是哪里不明白呢,是通過 ROWNUM 來查詢指定條數的記錄,需要怎么解釋呢?  回復  更多評論   

          導航

          <2006年10月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          統計

          常用鏈接

          留言簿(15)

          隨筆分類

          隨筆檔案

          相冊

          收藏夾

          博客

          文檔

          站點

          論壇

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 敦煌市| 镶黄旗| 永新县| 南漳县| 教育| 方城县| 佛山市| 元朗区| 彩票| 枣强县| 鄂尔多斯市| 辉县市| 射洪县| 民勤县| 佛坪县| 德昌县| 宜春市| 繁峙县| 宁南县| 茌平县| 科技| 衡南县| 平遥县| 项城市| 深水埗区| 龙山县| 碌曲县| 鄂托克前旗| 五峰| 宝丰县| 镇远县| 丹东市| 临沂市| 德格县| 长阳| 天祝| 丰镇市| 南宫市| 布尔津县| 梁山县| 乌兰察布市|