【发布时间】:2018-12-06 16:46:47
【问题描述】:
我正在使用 PostgreSQL,但我对 SQL 却一无所知。我有一个很长的记录表,并希望将它们分配到组中,其中组的每个成员具有与组中至少一个其他成员相同的两列之一。理想情况下,通过创建一个表格,其中包含来自任一列的所有不同值(那里没有重叠,因为它们是完全不同的字符值)以及它们所属的组数。
我希望某些组仅由一个成员组成,但可能存在很长的关系链,其中两条记录未连接,但第三条记录将它们连接起来。使用编程语言(例如 JavaScript)我可能会使用递归函数,但使用 SQL 我会迷路。
我曾尝试寻找答案,但我发现很难找到合适的关键词。这有点像一个巨大的多米诺骨牌游戏,但仍然有点不同。这个问题有什么简单的解决方案吗?如果没有,有人可以指点我一个好的方向吗?
编辑: 一些示例数据。 userId 和 session 是我的两列。所以在这种情况下,Id 2、4 和 6 将在同一个组中。
Id 类型 userID 会话 1 回调 25596094 lJcD7fiFCnB4o4ZxI_DQHKMmBGW1T0b4 2 回调 26631605 xupFcU6C8cl7wdviOnc1XX37Feg234vK 3 回调 02-9128924-01 eNE8VuJBz9vffGeuALy72owq1cJhK84l 4 回调 26631605 GhenxfiVXQaGbYq2_SXJhhkvTRN8M3vb 5 回调globetrotter-394146 PdJEDeW57piXMu6nNsJjLZeFmNrP2jvG 6 回调 31831125 xupFcU6C8cl7wdviOnc1XX37Feg234vK【问题讨论】:
-
递归查询可以轻松地从起始行获取所有相关行,并将相同的“组 ID”分配给所有找到的行。现在,您需要多次运行它才能无限地处理第二、第三、第四组。
-
请添加一些示例数据,便于我们了解具体情况。几行就足够了。
标签: sql postgresql