我有3个表:'任务','联系'和' task_contact'。这是BOOL专栏' primary_contact'在' task_contact'表。首先,一个任务可以有一个或多个主要联系人和一个或多个次要联系人(可选)但现在我决定将两者都限制为1:这样1个任务只能有1个主要联系人和1个次要联系人(可选)。但是我有一张现有的桌子&task`contact'在包含大量现在不一致数据的实时服务器上。
我需要的是在' task_contact'中只保留最新的主要和次要行(如果确实存在)联系人。表格和删除所有重复的' primary_contact'行,以便我可以为(' task_id',' primary_contact')应用UNIQUE约束。
提前感谢您的帮助。
答案 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