【问题标题】:Select records that are not repeated reversely in sql选择sql中不反向重复的记录
【发布时间】:2021-05-08 21:59:29
【问题描述】:

假设我们有一个包含两列用户对的简单表:user1 和 user2。此外,假设一些对出现两次(以相反的顺序),而另一些则没有。因此,例如,对 (1,2) 出现在 (user1=1 and user2=2) 的记录和 (user1=2 and user2=1) 的另一记录中,而对 (1,3) 出现仅作为(user1=1 和 user2=3)一次。

我想编写一个返回所有对但不包括重复项的查询,这意味着返回的查询中每对只出现一次。因此,对于上述示例,对 (1,2) 应仅显示为 (user1=1 and user2=2) 或 (user1=2 and user2=1),但不能同时显示。

在 postgre sql 中实现这一目标的最简单方法是什么?

【问题讨论】:

    标签: mysql sql postgresql


    【解决方案1】:

    一个简单的方法是:

    select user1, user2
    from t
    where user1 < user2 or
          not exists (select 1
                      from t t2
                      where t2.user1 = t1.user2 and t2.user2 = t1.user1
                     );
    

    第一个条件返回user1 &lt; user2 所在的所有行。第二个返回只有一对的所有行——但是因为这都在同一个where中,所以满足第一个条件的一对只返回一次。

    【讨论】:

    • 好吧,使用 'WHERE user1
    猜你喜欢
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 2011-08-05
    • 2012-03-19
    • 2011-08-11
    • 2015-12-27
    • 2013-12-29
    相关资源
    最近更新 更多