id user_id friend_id
134 1 2
132 2 1
82 1 5
48 1 4
28 4 1
10 6 1
我有一张表格,其中包含上述细节。由此,我只需要一行不会复制两个字段(user_id
,friend_id
)。即第一行有user_id = 1
和friend_id = 2
,第二行{ {1}}和user_id = 2
。我不需要让两个行具有相同的值。
是否可以为以下输出编写查询?
friend_id = 1
答案 0 :(得分:0)
如果切换的友情不存在,请使用NOT EXISTS
返回一行 - 获取更高的ID(保留其中一对)。
select t1.*
from tablename t1
where not exists (select * from tablename t2
where t1.user_id = t2.friend_id
and t1.friend_id = t1.user_id
and t2.id > t1.id)
这是另一个版本,受scaisEdge的影响(谢谢!):
select * from your_table
where (user_id, friend_id) not in (select friend_id, user_id from your_table)
or user_id > friend_id
order by id desc;
or user_id > friend_id
用于保留每对中的一个实例。
答案 1 :(得分:0)
一种解决方案是使用GROUP BY
查询以及greatest
和least
函数:
select
max(id) AS id,
least(user_id, friend_id) as user_id,
greatest(user_id, friend_id) as friend_id
from
tablename
group by
least(user_id, friend_id) as user_id,
greatest(user_id, friend_id) as friend_id