mysql 清除多列重復數據,只保留其中一條


-- 創建臨時表存儲查詢出的數據
drop temporary table if exists childtable;
create temporary table childtable (select * from tb_child a where 
(a.patriarch_id,a.student_id) in (select patriarch_id,student_id from tb_child group by patriarch_id,student_id 
having count(*) > 1)
and child_id not in (select min(child_id) from tb_child group 
by patriarch_id,student_id having count(*)>1));

select *From childtable
drop temporary table childtable;
-- 根據條件刪除臨時表格中的數據
delete from tb_child  where  child_id in (select childtable.child_id from childtable)

--查詢出 綁定關系表中 家長id和學生id重復的數據。但是不包含 綁定關系id最小的那一條記錄
select * from tb_child a where 
(a.patriarch_id,a.student_id) in (select patriarch_id,student_id from tb_child group by patriarch_id,student_id 
having count(*) > 1)
and child_id not in (select min(child_id) from tb_child group 
by patriarch_id,student_id having count(*)>1)

-- 查詢出具有patriarch_id ,student_id 重復的數據(排除id最小的第一條數據) 帶行號
select (@rownum := @rownum + 1) AS rownum ,a.* from tb_child a, (SELECT  @rownum := 0) AS rn  where 
(a.patriarch_id,a.student_id) in (select patriarch_id,student_id from tb_child group by patriarch_id,student_id 
having count(*) > 1)
and child_id not in (select min(child_id) from tb_child group 
by patriarch_id,student_id having count(*)>1)

--查詢出具有patriarch_id ,student_id 重復的數據 帶行號
select (@rownum := @rownum + 1) AS rownum ,ci.* from tb_child ci, (SELECT 
    @rownum := 0) AS rn  where patriarch_id in (select patriarch_id from tb_child group by patriarch_id,student_id having count(*) > 1) 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM