1. 程式人生 > >臨時表的建立和重複資料的處理

臨時表的建立和重複資料的處理

 

UPDATE student b SET b.sname = 'dd' WHERE b.id = (SELECT a.id FROM student a WHERE a.id = '3')

Mysql中根據條件(表A中的欄位)操作表A中的資料時是不可以的

所以藉助臨時表來刪除/更新重複的資料,原理就是刪除每組重複資料中除id值最大的其他記錄

select id,name from student

1、根據特定條件查詢出每組重複資料中id最大的一條記錄

SELECT MAX(id) id,name FROM student GROUP BY name HAVING COUNT(name) > 1

        

2、將id值和查重條件新增到臨時表maxids

Create table maxids

SELECT MAX(id) id,name FROM student GROUP BY name HAVING COUNT(name) > 1

3、根據查重條件查詢出重複資料中id值不為最大id的所有記錄的id,此處一定要注意使用去重條件去查詢,不然會將其他不重複的資料查詢出來

SELECT id FROM student a

WHERE EXISTS ( SELECT id FROM maxids WHERE a.id != id AND a.name = `name`)

4、將3中查出的記錄新增到臨時表repeatids

Create table repeatids

SELECT id FROM student a

WHERE EXISTS ( SELECT id FROM maxids WHERE a.id != id AND a.name = `name`)

5、根據臨時表repeatids中的id值刪除重複資料

Delete from student where id in (select id from repeatids)

6、刪除臨時表

Drop table maxids

Drop table repeatids

7、去重之後結果

select id,name from student