在SQLite中查询某个用户关注的所有用户的所有用户

问题描述 投票:0回答:1
简介:

我一直在学习 SQLite,但无法针对此查询提示找到令人满意的解决方案。我的策略包括计算关注 John Doe 关注的每个人的用户补充量。然而,它很混乱,我不禁想到必须有一个更干净、更简单的解决方案。

相关表格:

关注(flwerflwee、日期)

用户(usr,名称)

其中 flwerflweeusr 都是 int 用户 ID 和密钥

提示:

查找关注 John Doe 关注的每个用户的用户 ID。 John Doe 的匹配不区分大小写。

我的解决方案:
Select flwer from
(
Select * from follows
Except
Select *
From follows f2
Where not exists (
    Select flwer, flwee
    From follows, users u1
    Where flwee = f2.flwee and flwer = u1.usr and upper(u1.name) = upper("John Doe")
    ) 
)
group by flwer having count(*) >= (Select Count(*) From follows, users u1 where flwer = u1.usr and upper(u1.name) = upper("John Doe"))

对此有什么指导性建议吗?在集合表示法中,我希望所有 x s.t {x 以下} 是 {John Doe 以下} 的超集

sql sqlite
1个回答
0
投票

您可以考虑使用

Count()
窗口函数来获取关注者的关注者数量,以用于进行 John Doe 比较。这与您在 SQL 中采用的方向类似。

我还将一些可重用逻辑封装在 CTE 中,以保持代码整洁:

WITH JohnDoe AS (
    SELECT flwee
    FROM Follows
    WHERE flwer = (SELECT usr FROM Users WHERE name = 'John Doe')
)
SELECT DISTINCT Users.Name
FROM (
      SELECT flwer, flwee, COUNT(flwee) OVER (PARTITION BY flwer) as flwee_count
      FROM Follows
      WHERE flwee IN (SELECT flwee FROM JohnDoe)
    ) as sub 
  INNER JOIN Users 
     ON sub.flwer = Users.usr
WHERE flwee_count >= (SELECT COUNT(*) FROM JohnDoe);

dbfiddle 在此操作

© www.soinside.com 2019 - 2024. All rights reserved.