臨時表的建立和重複資料的處理
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