避免以可空关系重复记录

时间:2019-03-11 07:12:04

标签: sql sql-server tsql

给出玩家表:

-------------------------
| id    | name  | email |
-------------------------

和一个友谊表:

------------------------------------
| status    | playerId  | friendId |
------------------------------------

我正在使用以下查询来检索玩家信息和玩家之间的关系状态:

declare @id int = 1

select * from 
(SELECT
    p.id,
    p.name,
    p.email,
    p.email_verified,
    p.gender,
    p.picture,
    f1.playerId,
    f1.friendId,
    f1.status

  FROM players p
    LEFT OUTER JOIN friendships f1
    ON
  f1.playerId = p.id or f1.friendId = p.id) as pl
WHERE
pl.id <> @id

结果如下:

id  name        email                       playerId    friendId    status
2   Nina        el@gmail.com                2           1           1
2   Nina        el@gmail.com                2           49          1
49  Ciccio      testpast@gmail.com          2           49          1

在这种情况下,用户2与用户1和另一个用户处于友好状态,我需要显示第一条记录,因为它与user id参数有关,但我还需要检索所有用户,并且与不。 我该怎么办?

1 个答案:

答案 0 :(得分:1)

使用row_number()窗口功能

select * from (SELECT
    p.id,
    p.name,
    p.email,
    p.email_verified,
    p.gender,
    p.picture,
    f1.playerId,
    f1.friendId,
    f1.status,
    row_number() over(partition by p.id,
    p.name,
    p.email,f1.friendId order by id) rn

  FROM players p
    LEFT OUTER JOIN friendships f1
    ON
  f1.playerId = p.id or f1.friendId = p.id
) t where t.rn=1
相关问题