删除具有重复字段值的行

时间:2016-11-07 12:23:02

标签: mysql sql

我有3个表:'任务','联系'和' task_contact'。这是BOOL专栏' primary_contact'在' task_contact'表。首先,一个任务可以有一个或多个主要联系人和一个或多个次要联系人(可选)但现在我决定将两者都限制为1:这样1个任务只能有1个主要联系人和1个次要联系人(可选)。但是我有一张现有的桌子&task`contact'在包含大量现在不一致数据的实时服务器上。

我需要的是在' task_contact'中只保留最新的主要和次要行(如果确实存在)联系人。表格和删除所有重复的' primary_contact'行,以便我可以为(' task_id',' primary_contact')应用UNIQUE约束。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

假设每个task_contact行都有一个唯一的task_contact_id 你可以用

      delete from  
      task_contact_id 
      where task_contact_id  in ( select id from
        ( select max(task_contact_id) id, task_id
      from task_contact
      where primary_contat = false 
      group by task_id
      having count(*)>1
      ) t

如果你有一个以上,那么你可以做反向

      delete from  
      task_contact_id 
      where task_contact_id  not in ( select id from
        ( select min(task_contact_id), task_id
      from task_contact
      where primary_contat = false 
      group by task_id
      having count(*) >1
      ) t
      and primary_contat = false