簡體   English   中英

Select 在 sql 中沒有反向重復的記錄

[英]Select records that are not repeated reversely in sql

假設我們有一個包含兩列用戶對的簡單表: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 中實現這一目標的最簡單方法是什么?

一個簡單的方法是:

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 < user2的所有行。 第二個返回只有一對的所有行——但是因為這都在同一個where ,所以滿足第一個條件的一對只返回一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM