sql - 如何获取唯一的 id 对行?

标签 sql postgresql

我有这张用户对表:

table

我怎样才能选择行以便我有一对?例如,如果我有 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/

相关文章:

sql - 财务期间的日期时间转换

MySQL区分大小写的更新语句

MySQL 触发器不知道默认值

mysql - 使用 SQL 为每个名称放置一行

python - 使用 pyodbc 创建列 - 不工作

postgresql - 无法访问在 docker 入口点文件中创建的 postgres 扩展,直到我在 psql 中手动创建它

sql - Rails 4 ActiveRecord 有很多通过关系无法从 sql 文件读取

asp.net - 为什么 @User.IsInRole 不起作用?

postgresql - 删除列中的非数字字符(字符变化),postgresql (9.3.5)

postgresql - 仅使用带有压缩参数的 pg_dump 可能导致备份损坏?