微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PostgreSQL 中所有方式删除与已匹配用户的匹配

如何解决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 举报,一经查实,本站将立刻删除。