sql - 如何实现同一张表的一对多关系?
问题描述
我有一个名为 user 的表。现在我正在构建一个用户可以有很多用户作为朋友的应用程序。所以我认为我应该创建一个名为 friends_list 的新表并实现一对多的关系,其中 (user) 是一个并且 (friends_list) 是多个。然后要获取用户拥有的朋友列表,我可以这样做select * from friends where userId = XXXx.
这是最好的方法吗?还是有另一种更好的方法来创建与同一张表的关系?
解决方案
你的方法是最好的方法。您想表示一个 nm 关系(一个用户有很多朋友,反之亦然)。
有一些考虑。如果“友谊”是对称的(即 A 朋友 B 自动意味着 B 朋友 A),那么当插入一个时,您可能希望将两者都包含在表中。您可能还想阻止用户自我交友。
如果您想以列表的形式检索用户的朋友,您可以使用字符串连接函数来实现。在标准 SQL 中,这是:
select listagg(friendid, ',') within group (order by friendid) as friendids
from friends
where userid = XXX;
不同的数据库对listagg()
.
推荐阅读
- azure - 在 Synapse Analytics 上优化 Azure 分析服务处理
- powershell - 无法将 SharePoint (PnP) 连接传递到 PowerShell 作业,因为它正在反序列化?
- angular - Angular:如果没有输入,则不显示 HTML 属性
- java - Jsoup Login in to website仅返回html的头部
- mysql - 在不使用子查询的情况下为 CREATE VIEW 重新构造查询?
- sql - 用“-”分隔列(用于 xml 路径)
- powershell - 使用 PowerShell 解析 Win32 可执行输出
- pandas - 在df python中动态创建列
- python - autoAugment 函数的返回
- python - 参数化 kusto 函数的异常输入