给出玩家表:
-------------------------
| 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参数有关,但我还需要检索所有用户,并且与不。 我该怎么办?
答案 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