【发布时间】:2017-08-11 10:04:53
【问题描述】:
我想知道是否可以将一个内连接与另一个内连接进行内连接。
我有一个包含 3 个表格的数据库:
people
athletes
coachs
每个运动员或教练都必须存在于人员表中,但有些人既不是教练也不是运动员。
我要做的是找到一份至少在 3 种不同运动中活跃(即比赛或教练)的人的名单。活跃的定义是他们要么是教练、运动员,要么是该运动的教练和运动员。
person 表将由 (id、name、height) 组成 athlete 表将是 (id, sport) coaching 表将是 (id, sport)
我创建了 3 个内部联接,它们告诉我谁既是教练又是运动员,谁只是教练,谁只是运动员。
这是通过内部连接完成的。
例如,
1) 既是教练又是运动员
select
person.id,
person.name,
coach.sport as 'Coaches and plays this sport'
from coach
inner join athlete
on coach.id = athlete.id
and coach.sport = athlete.sport
inner join person
on athlete.id = person.id
这会列出所有教练和从事相同运动的人。
2)为了找出谁只教练运动,我使用了如下内连接:
select
person.id,
person.name,
coach.sport as 'Coaches this sport'
from coach
inner join person
on coach.id = person.id
3) 然后找出谁只玩运动,我和 2) 一样,只是调整了单词
select
person.id,
person.name,
athlete.sport as 'Plays this sport'
from athlete
inner join person
on athlete.id = person.id
现在我得到了最终结果: 1) 从事和指导同一项运动的人 2) 教练运动的人 3) 从事运动的人
我想知道的是如何找到参加或指导至少 3 种不同运动的人的名单?我想不通,因为如果有人在表 1 中从事和指导曲棍球等运动,那么我不想将他们计入表 2 和表 3。
我尝试使用这 3 个内部连接来制作一个庞大的连接表,以便我可以选择不同的值,但它不起作用。
有没有更简单的方法来解决这个问题而无需进行子查询?
【问题讨论】:
-
你有什么错误吗?
-
您需要什么实际输出?您最初说您需要找到至少在 3 项运动中活跃的人 - 但随后您现有的查询会生成更多详细信息(例如,他们如何他们在这些运动中活跃)。最终输出中是否需要该详细信息?
-
请阅读minimal reproducible example并采取行动。
标签: sql sql-server tsql join