国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

Mysql中查找并刪除重復數據的方法

2024-07-24 12:36:44
字體:
來源:轉載
供稿:網友

(一)單個字段

1、查找表中多余的重復記錄,根據question_title字段來判斷,代碼如下:

  1. select * from questions where question_title in (select question_title from people group by question_title having count(question_title) > 1) 

2、刪除表中多余的重復記錄,根據question_title字段來判斷,只留有一個記錄,代碼如下:

  1. delete from questions 
  2. where peopleId in (select peopleId from people group by peopleId having count(question_title) > 1) 
  3. and min(id) not in (select question_id from questions group by question_title having count(question_title)>1)  

(二)多個字段

刪除表中多余的重復記錄,多個字段,只留有rowid最小的記錄,代碼如下:

  1. DELETE FROM questions WHERE (questions_title,questions_scope) IN (SELECT questions_title,questions_scope FROM questions GROUP BY questions_title,questions_scope HAVING COUNT(*) > 1) AND question_id NOT IN (SELECT MIN(question_id) FROM questions GROUP BY questions_scope,questions_title HAVING COUNT(*)>1) 

用上述語句無法刪除,創建了臨時表才刪的,求各位達人解釋一下,代碼如下:

  1. CREATE TABLE tmp AS SELECT question_id FROM questions WHERE (questions_title,questions_scope) IN (SELECT questions_title,questions_scope FROM questions GROUP BY questions_title,questions_scope HAVING COUNT(*) > 1) AND question_id NOT IN (SELECT MIN(question_id) FROM questions GROUP BY questions_scope,questions_title HAVING COUNT(*)>1); 
  2.  
  3. DELETE FROM questions WHERE question_id IN (SELECT question_id FROM tmp); 
  4.  
  5. DROP TABLE tmp; 

(三) 存儲過程,代碼如下:

  1. declare @max integer,@id integer 
  2.  
  3. declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1 
  4.  
  5. open cur_rows 
  6.  
  7. fetch cur_rows into @id,@max 
  8.  
  9. while @@fetch_status=0 
  10.  
  11. begin 
  12.  
  13. select @max = @max -1 
  14.  
  15. set rowcount @max 
  16.  
  17. delete from 表名 where 主字段 = @id 
  18.  
  19. fetch cur_rows into @id,@max 
  20.  
  21. end 
  22.  
  23. close cur_rows 
  24.  
  25. set rowcount 0 

例,數據庫版本 Server version: 5.1.41-community-log MySQL Community Server (GPL).

例1,表中有主鍵(可唯一標識的字段),且該字段為數字類型,測試數據,代碼如下:

  1. /* 表結構 */ 
  2. DROP TABLE IF EXISTS `t1`; 
  3. CREATE TABLE IF NOT EXISTS `t1`( 
  4.   `id` INT(1) NOT NULL AUTO_INCREMENT, 
  5.   `nameVARCHAR(20) NOT NULL
  6.   `addVARCHAR(20) NOT NULL
  7.   PRIMARY KEY(`id`) 
  8. )Engine=InnoDB; 
  9.  
  10. /* 插入測試數據 */ 
  11. INSERT INTO `t1`(`name`,`add`) VALUES 
  12. ('abc',"123"), 
  13. ('abc',"123"), 
  14. ('abc',"321"), 
  15. ('abc',"123"), 
  16. ('xzy',"123"), 
  17. ('xzy',"456"), 
  18. ('xzy',"456"), 
  19. ('xzy',"456"), 
  20. ('xzy',"789"), 
  21. ('xzy',"987"), 
  22. ('xzy',"789"), 
  23. ('ijk',"147"), 
  24. ('ijk',"147"), 
  25. ('ijk',"852"), 
  26. ('opq',"852"), 
  27. ('opq',"963"), 
  28. ('opq',"741"), 
  29. ('tpk',"741"), 
  30. ('tpk',"963"), 
  31. ('tpk',"963"), 
  32. ('wer',"546"), 
  33. ('wer',"546"), 
  34. ('once',"546"); 
  35.  
  36. SELECT * FROM `t1`; 
  37. +----+------+-----+ 
  38. | id | name | add | 
  39. +----+------+-----+ 
  40. |  1 | abc  | 123 | 
  41. |  2 | abc  | 123 | 
  42. |  3 | abc  | 321 | 
  43. |  4 | abc  | 123 | 
  44. |  5 | xzy  | 123 | 
  45. |  6 | xzy  | 456 | 
  46. |  7 | xzy  | 456 | 
  47. |  8 | xzy  | 456 | 
  48. |  9 | xzy  | 789 | 
  49. | 10 | xzy  | 987 | 
  50. | 11 | xzy  | 789 | 
  51. | 12 | ijk  | 147 | 
  52. | 13 | ijk  | 147 | 
  53. | 14 | ijk  | 852 | 
  54. | 15 | opq  | 852 | 
  55. | 16 | opq  | 963 | 
  56. | 17 | opq  | 741 | 
  57. | 18 | tpk  | 741 | 
  58. | 19 | tpk  | 963 | 
  59. | 20 | tpk  | 963 | 
  60. | 21 | wer  | 546 | 
  61. | 22 | wer  | 546 | 
  62. | 23 | once | 546 | 
  63. +----+------+-----+ 
  64. rows in set (0.00 sec) 

查找id最小的重復數據(只查找id字段),代碼如下:

  1. /* 查找id最小的重復數據(只查找id字段) */ 
  2. SELECT DISTINCT MIN(`id`) AS `id` 
  3. FROM `t1` 
  4. GROUP BY `name`,`add
  5. HAVING COUNT(1) > 1; 
  6. +------+ 
  7. | id   | 
  8. +------+ 
  9. |    1 | 
  10. |   12 | 
  11. |   19 | 
  12. |   21 | 
  13. |    6 | 
  14. |    9 | 
  15. +------+ 
  16. rows in set (0.00 sec) 

查找所有重復數據,代碼如下:

  1. /* 查找所有重復數據 */ 
  2. SELECT `t1`.* 
  3. FROM `t1`,( 
  4.   SELECT `name`,`add
  5.   FROM `t1` 
  6.   GROUP BY `name`,`add
  7.   HAVING COUNT(1) > 1 
  8. AS `t2` 
  9. WHERE `t1`.`name` = `t2`.`name
  10.   AND `t1`.`add` = `t2`.`add`; 
  11. +----+------+-----+ 
  12.  
  13.  
  14. | id | name | add | 
  15. +----+------+-----+ 
  16. |  1 | abc  | 123 | 
  17. |  2 | abc  | 123 | 
  18. |  4 | abc  | www.survivalescaperooms.com| 
  19. |  6 | xzy  | 456 | 
  20. |  7 | xzy  | 456 | 
  21. |  8 | xzy  | 456 | 
  22. |  9 | xzy  | 789 | 
  23. | 11 | xzy  | 789 | 
  24. | 12 | ijk  | 147 | 
  25. | 13 | ijk  | 147 | 
  26. | 19 | tpk  | 963 | 
  27. | 20 | tpk  | 963 | 
  28. | 21 | wer  | 546 | 
  29. | 22 | wer  | 546 | 
  30. +----+------+-----+ 
  31. rows in set (0.00 sec)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 合肥市| 来宾市| 同仁县| 宽甸| 黄梅县| 平乡县| 绩溪县| 西乌珠穆沁旗| 武山县| 吴川市| 榆中县| 博湖县| 汝城县| 葫芦岛市| 桓仁| 南皮县| 遵化市| 绥化市| 大名县| 漳州市| 新乡市| 丰台区| 简阳市| 五大连池市| 西峡县| 合山市| 蓬安县| 临高县| 长兴县| 文昌市| 东海县| 万源市| 屯留县| 青冈县| 包头市| 乳山市| 互助| 泸水县| 泗阳县| 德昌县| 漳平市|