正在寻找一些查询结构帮助。我有一个表,其中包含链接时间戳、用户标识、链接标识、键入if链接的行。这些链接类型是例如“email”和“phone number”,因此在下面的示例中,您可以看到用户1没有直接连接到用户3,而是通过用户2。另一个复杂之处是每个“链接帐户”也出现在r1中,这意味着有几个“重复”字段(在示例中:第1+2行、第3+4行)
前任:
Link time user id linked_id link type
---------------------------------------------------
link_occurred at user 1 user 2 link a
link_occurred at user 2 user 1 link a
link_occurred at user 2 user 3 link b
link_occurred at user 3 user 2 link b
link_occurred_at user 4 user 5 link a
link_occurred_at user 5 user 4 link a
我可以使用什么函数来获取第一个用户id、所有(直接+间接)链接帐户的计数以及可能的链接帐户id数组。
例如,我希望这里的输出是:
initial user - Count linked accounts array of linked accounts
--------------------------------------------------------------
user 1 2 linked [user 2, user 3]
user 4 1 linked account [user 5]
这将使我对所有链接的帐户网络进行互斥分组。
1条答案
按热度按时间bbuxkriu1#
直到erwinbrandstetter在上面的评论中提到递归cte,我才知道。这个概念听起来是这样的:一个引用自身的cte,它有一个基本情况,这样递归就终止了。对于您的问题,递归cte解决方案可能类似于:
但是,我还不能测试这个查询,因为正如在另一个堆栈溢出q&apresto中详述的那样,它不支持递归cte。
通过反复连接回所拥有的表,可以遍历任意数量但有限的链接。类似这样的东西,为了清晰起见,我加入了第二、三、四级链接:
我一直在处理一组类似的数据,尽管我将原始标识符作为原始数据集的一部分。换句话说,你的例子中的“email”和“phone number”。我发现创建一个通过以下连接标识符对用户ID进行分组的表很有帮助:
然后,通过查找用户数组之间的交点,可以计算相同的任意但有限深度的链接集:
对于neo4j或janusgraph这样的图形数据库技术,计算到任意深度的链接是一个很好的用例。这就是我现在要解决的“用户链接”问题。