staff_no,leave_code,start_date,end_date,total_no_of_days,这几个字段内容相同(查询匹配),不同的是rees,from_time_to_time,update_date
要删除查询匹配重复的数据(staff_no,leave_code,start_date,end_date,total_no_of_days这几个字段内容相同) ,(删除重复数据中from_time和to_time为空数据)
删除SQL如何写,谢谢各位 ,字段信息见附件

解决方案 »

  1.   

    如果有自增id 可以distinct这些字段到一个小表   然后根据小表里面id进行删除大表
      

  2.   

    DELETE  t
    FROM    表 t ,
            ( SELECT    staff_no ,
                        leave_code ,
                        start_date ,
                        end_date ,
                        total_no_of_days ,
                        COUNT(1) AS num
              FROM      表
              GROUP BY  staff_no ,
                        leave_code ,
                        start_date ,
                        end_date ,
                        total_no_of_days
              HAVING    COUNT(1) > 1
            ) t1
    WHERE   t.staff_no = t1.staff_no
            AND t.leave_code = t1.leave_code
            AND t.start_date = t1.start_date
            AND t.end_date = t1.end_date
            AND t.total_no_of_days = t1.total_no_of_days
            AND from_time IS NULL
            AND to_time IS NULL
      

  3.   

    你这个重复的记录要留一条的吧,如果是的话,就必须还要指定一个列,如UPDATE_DATE,意思是相同记录保留UPDATE_DATE最大的记录,其它的删除,如留下最大UPDATE_DATE记录delete a from 表 a
    where exists (select 1 from (select staff_no,leave_code,start_date,end_date,total_no_of_days
                                                      from 表
                                                      group by staff_no,leave_code,start_date,end_date,total_no_of_days 
                                                      having count(1) > 1) b
                              where a.staff_no = b.staff_no and a.leave_code = b.leave_code
                              and a.start_date = b.start_date and a.end_date = b.end_date 
                              and a.total_no_of_days = b.total_no_of_days)
    and not exists (select 1 from (select max(UPDATE_DATE) AS UPDATE_DATE
                                                      from 表
                                                      group by staff_no,leave_code,start_date,end_date,total_no_of_days 
                                                      having count(1) > 1) c
                                 where a.update_date = c.update_date)至于其它set null,就是删除后,一句简单sql语句的事了。
    sql语句未测试,先select后,检查正确再删。