【问题标题】:SQL - JOIN of JOIN / UNION of joinsSQL - JOIN 的 JOIN / UNION 的连接
【发布时间】:2017-10-21 09:57:51
【问题描述】:

考虑以下代表体育俱乐部的 SQL 数据库架构:

父母 (PARENT) 的孩子 (KID) 是团队 (TEAM) 成员 (MEMBERS)。父母也可能是团队管理员 (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

但我不知道如何获得两者的联合(或加入?)。

【问题讨论】:

  • 请添加您迄今为止尝试过的查询以及一些示例数据和预期结果。
  • 问题已更新
  • 您不需要在第二个查询中加入 Parent 表,因为 Admin 表本身包含相关的 Parent id。同样要合并两个结果,只需在两个查询之间使用 UNION。
  • PARENT 在两个查询中都加入了?我完全迷路了,我会休息一下...... :-)
  • 如你所愿.....但我认为下面给出的答案应该有效。试一次。

标签: sql join union


【解决方案1】:

这可能不是一种优化的方式(为此,我需要知道数据库中的表大小和其他细微差别)。但我认为这会给你所需要的(因为你不需要团队名称)

select distinct a.parent_id, b.id_team
from parent as a
left join admin as b
  on a.parent_id = b.parent_id

UNION --this will remove duplicates

select distinct a.parent_id, c.id_team
from parent as a
left join kid as b
  on a.parent_id = b.parent_id
left join members as c
  on b.id_kid = c.id_kid

【讨论】:

  • 你是最棒的。
猜你喜欢
  • 2011-09-29
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
  • 2011-07-11
  • 1970-01-01
相关资源
最近更新 更多