如何解决PostgreSQL 中所有方式删除与已匹配用户的匹配
我需要删除已经匹配的用户匹配项。所以我有一个表:“MatchingUser”,看起来像这样:
id | idUser1 | idUser2
1 1 2
2 1 3
3 1 2
4 2 1
在这个例子中,我想删除条目 3 和 4,因为匹配与条目 1 相同:如果 1 与 2 匹配,我需要删除 3,因为它是相同的匹配,也是 4,因为 2 匹配 1 是与1匹配2相同。
我已经有了这个:
DELETE FROM "WU_MatchingUsers" WHERE "id" IN (SELECT "id" FROM (SELECT "id",ROW_NUMBER() OVER( PARTITION BY "IDWU_User1","IDWU_User2" ORDER BY "id" DESC) AS row_num FROM "WU_MatchingUsers") t WHERE t.row_num >1);
这个已经删除了相同的匹配,所以在我们的例子中这个已经删除了条目 3 而不是 4,我想在这个查询中添加一些东西来删除条目 4。
解决方法
我会使用 EXISTS 条件
delete from MatchingUser mu1
where exists (select *
from MatchingUser mu2
where mu2.id < mu1.id
and least(mu2.iduser1,mu2.iduser2) = least(mu1.iduser1,mu1.iduser2)
and greatest(mu2.iduser1,mu2.iduser2) = greatest(mu1.iduser1,mu1.iduser2))
这会删除所有 iduser1/iduser2 组合相同但 ID 值高于现有行的行。所以在这种情况下,ID = 3 和 ID = 4 的行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。