我有这张用户对表:
我怎样才能选择行以便我有一对?例如,如果我有 1-2,我不需要 2-1。所以这是所需的输出:
1 | 2
4 | 11
5 | 6
7 | 8
也许这是查询变得过于复杂的情况,最好只获取图像的结果,然后在应用程序中处理结果集。
我使用 PostgreSQL,如果它有助于优化查询的话。
最佳答案
您可以使用 least()
和 greatest()
函数执行此操作:
select distinct least(user_id, pair_id), greatest(user_id, pair_id)
from userpairs;
此方法有可能返回表中实际上不存在的一对(例如,如果出现“(9,3)”但没有“(3,9)”)。如果你只想要表中的实际对,你可以这样做:
select user_id, pair_id
from userpairs up1
where user_id <= pair_id or
not exists (select 1
from user_pairs up2
where up2.user_id = up1.pair_id and up2.pair_id = up1.user_id
);
如果原始数据中可能存在重复项,那么您也需要在此处select distinct
。否则没有必要。
关于sql - 如何获取唯一的 id 对行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23998582/