【发布时间】:2021-03-20 15:57:48
【问题描述】:
数据库表
我有两张桌子:
-
account表,具有id和username字段(以及其他非相关字段 - account table full structure)。 -
account_ip表,具有account和ip字段(以及其他非相关字段 - account_ip table full structure)。
他们的关系是:
-
account_ip.account字段与account.id链接。
account_ip 表的用途是
- 跟踪每个帐户已成功登录的所有 IP。
帐号IP关联
约定:
- 如果两个帐户在
account_ip表中具有共同的 IP,我们就说这两个帐户是关联
例如:
在这种情况下,帐户 12 链接到 13,因为它们有共同的 127.0.0.1,而帐户 13 链接到 14,因为它们有共同的 127.0.0.4:
12 13 14
查询
我可以跑一些queries,比如:
- 级别 1:选择与给定帐户 ID 123 关联的所有帐户/IP
SELECT account.username, account_ip.* FROM account_ip
INNER JOIN account ON account.id = account_ip.account
WHERE ip IN (
SELECT ip FROM account_ip WHERE account = 123
);
- 第 2 级:选择与给定帐户 ID 123 关联的所有帐户关联的所有帐户/IP
SELECT account.username, account_ip.* FROM account_ip INNER JOIN account ON account.id = account_ip.account
WHERE ip IN (
SELECT ip FROM account_ip WHERE account IN (
SELECT account FROM account_ip WHERE ip IN (
SELECT ip FROM account_ip WHERE account = 123
)
)
);
但最后一个只持续到 2 级链接。
问题
给定一个帐户 ID,我如何在任何链接级别获取与该帐户相关的所有帐户/IP?
例如,如果我有这种链接关系:
12 13 14 15 16
给定帐户12,我想要一个查询,提供所有帐户和 12、13、14、15 和 16 的 IP。
【问题讨论】:
标签: mysql sql database mariadb azerothcore