夢幻之旅

          DEBUG - 天道酬勤

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks
          記得兩年前我的老師給我出了一道題目:
          假如有一張users表,里面有user_id,user_name兩個字段,用一條sql語句去掉數據庫里的userName重復的記錄.
          當時想了很久,都沒想出答案.今天突然想起這個問題,想到了兩種實現.

          1.delete from users a  where a.user_id = (select max(b.user_id) from users b where a.user_name=b.user_name);
          這一種自聯接,效率低一點.

          2.delete from users where user_id not in(select max(user_id) from users group by user_name having count(user_name)>=1);
          這一種先分組,效率高一些.
          在此作下符號,希望對同行的朋友們有所啟示.

          posted on 2008-07-25 14:10 HUIKK 閱讀(8576) 評論(7)  編輯  收藏 所屬分類: DataBase

          評論

          # re: 一條sql 數據庫 去重 2008-07-25 14:18 大鳥
          是userName重復的數據,不是user_id重復的數據,所以感覺這個答案有問題....  回復  更多評論
            

          # re: 一條sql 數據庫 去重 2008-07-25 14:25 隔葉黃鶯
          作者的主鍵就是 user_id+user_name的,沒問題。  回復  更多評論
            

          # re: 一條sql 數據庫 去重 2008-07-25 15:47 龐永慶
          你好 我是出版社的編輯,我看到你博客中的內容。現在想出版一本SQL的書。如果想把這些內容和更多的人分享,可以和我聯系,把這些東西寫成書。
          我的郵箱:books_522008@yahoo.com.cn
          或者加我的MSN:pyq_19852008@hotmail.com  回復  更多評論
            

          # re: 一條sql 數據庫 去重 2008-07-25 17:50 Yata
          要是id不是主鍵的話,你的SQL就有問題了,我是這樣寫的:

          delete from test A
          where
          A.id != (select B.id from (select max(C.id) as id,C.name from test C group by C.name) B where B.Name = A.name)

          我用的表名是test,字段是id和name。  回復  更多評論
            

          # re: 一條sql 數據庫 去重 2008-07-26 09:08 way
          你的答案調不通  回復  更多評論
            

          # re: 一條sql 數據庫 去重 2010-04-25 19:02 dupidog
          第一種=要改成<>吧
          第二種having字句沒必要?沒看出來having字句有什么用  回復  更多評論
            

          # re: 一條sql 數據庫 去重 2012-04-04 14:12 xzdream
          2.delete from users where user_id not in(select max(user_id) from users group by user_name having count(user_name)>=1);
          是不是不加not呀,樓主  回復  更多評論
            

          主站蜘蛛池模板: 高尔夫| 尖扎县| 仪征市| 东方市| 三门县| 黄陵县| 衡阳县| 湾仔区| 调兵山市| 余庆县| 宜州市| 陇南市| 临洮县| 噶尔县| 宝山区| 普兰店市| 汝阳县| 忻州市| 托克逊县| 塔城市| 堆龙德庆县| 荆门市| 东丰县| 两当县| 邵阳县| 彩票| 潮安县| 高平市| 社旗县| 建昌县| 汉川市| 敦煌市| 安溪县| 浏阳市| 门头沟区| 姜堰市| 临邑县| 信宜市| 蒙自县| 晋宁县| 比如县|