如何在SQL中优雅地编写这个?

Sti*_*MAN 1 mysql sql

我有一个包含用户信息的表(用户).

我有另一个记录用户视图的表(userview) - 也就是说,当一个用户查看另一个用户详细信息时,我记录了查看者的id以及他/她查看的用户的id.

我想写一个查询,帮助我回答这个问题:

获取查看SPECIFIED用户的用户查看的所有用户的列表.

这似乎是一个直截了当的天真要求,但我想出的SQL(至少在我看来),太复杂了.我认为一个优雅的解决方案是在userview上使用自联接,并且(可能?)用户和用户视图之间的内部联接.

是否有任何SQL'诗人'可以帮助解决这个问题?

我正在使用mySQL 5.x,但理想情况下SQL应该是fb不可知的

Guf*_*ffa 6

让我们从"查看此用户的用户"开始:

select v1.viewer
from userview v1
where v1.viewee = @thisUserId
Run Code Online (Sandbox Code Playgroud)

然后添加"被查看过的用户":

select v2.viewee
from userview v1
inner join userview v2 on v2.viewer = v1.viewer
where v1.viewee = @thisUserId
Run Code Online (Sandbox Code Playgroud)

然后添加用户表以从中获取数据:

select u.userid, u.someotherfields
from userview v1
inner join userview v2 on v2.viewer = v1.viewer
inner join user u on u.userid = v2.viewee
where v1.viewee = @thisUserId
Run Code Online (Sandbox Code Playgroud)