考虑以下代表体育俱乐部的SQL数据库架构:Bug 526054
父母(父母)有孩子(KID)是团队(TEAM)成员(成员)。父母也可以是团队管理员(ADMIN)。请注意:
给定PARENT.id_parent,如何选择链接到此父级(管理员,父级或两者)的TEAM.id_team列表。每个TEAM.id_team必须是唯一的,即使父母在团队中有孩子并且是管理员。
以下内容为我提供了通过儿童与父母联系的团队:
SELECT DISTINCT TEAM. *
FROM TEAM
INNER JOIN MEMBERS ON MEMBERS.id_team = TEAM.id_team
INNER JOIN KID ON KID.id_kid = MEMBERS.id_kid
WHERE KID.id_parent = 1
这个给了我父母是管理员的团队:
SELECT DISTINCT TEAM . *
FROM TEAM
INNER JOIN ADMIN ON ADMIN.id_team = TEAM.id_team
WHERE ADMIN.id_parent = 1
但我不知道如何获得两者的联合(或加入?)。
答案 0 :(得分:1)
这可能不是一种优化的方式(要做到这一点,我需要知道数据库中的表大小和其他细微差别)。但我认为这会给你所需要的东西(因为你不需要团队名称)
In [86]: a = [3, 4, 2, 1, 7, 6, 5]
...: b = [4, 6]
...:
In [87]: %timeit min(map(a.index, b))
...:
608 ns ± 64.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [88]: bset = set(b)
...:
In [89]: %timeit next(i for i, v in enumerate(a) if v in bset)
...:
717 ns ± 30.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)