避免在SQL中的多个字段中重复

时间:2016-01-29 07:30:54

标签: php sql

id  user_id     friend_id

 134       1            2
 132       2            1
  82       1            5
  48       1            4
  28       4            1
  10       6            1

我有一张表格,其中包含上述细节。由此,我只需要一行不会复制两个字段(user_idfriend_id)。即第一行有user_id = 1friend_id = 2,第二行{ {1}}和user_id = 2。我不需要让两个行具有相同的值。

是否可以为以下输出编写查询?

friend_id = 1

2 个答案:

答案 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查询以及greatestleast函数:

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