假设有 2 个表:
TABLE: team
-----------
| team_id |
===========
| 1 |
-----------
| 2 |
-----------
TABLE: team_member
-------------------------------------------
| team_member_id | team_id | age | gender |
===========================================
| 1 | 1 | 20 | Male |
-------------------------------------------
| 1 | 2 | 25 | Male |
-------------------------------------------
| 1 | 2 | 23 | Female |
-------------------------------------------
如何搜索这样的内容:
- 所有年龄在 18 至 25 岁之间的男性团队的列表。
- 所有男性和女性团队的列表,其中任一性别的年龄在 18 至 25 岁之间。
- 等等
我基本上正在寻找有关如何在team
的所有子记录中应用某些过滤器(例如年龄)的一般策略。有建议吗?
最佳答案
团队,团队成员
如果您仅检查全男性或全女性团队,则不能只应用简单的 WHERE 子句...它需要与全套团队成员进行比较。尝试一下
select
tm.team_id,
sum( if( tm.gender = 'Male' AND tm.age between 18 and 25, 1, 0 )) as MaleInRange,
count(*) AllTeamMembers
from
team_member tm
group by
tm.Team_ID
having
MaleInRange = AllTeamMembers
同样,为了确保您同时拥有男性和女性......
select
tm.team_id,
sum( if( tm.age between 18 and 25, 1, 0 )) as AgeInRange,
sum( if( tm.gender = 'Male', 1, 0 )) as MaleCnt,
sum( if( tm.gender = 'Female', 1, 0 )) as FemaleCnt,
count(*) AllTeamMembers
from
team_member tm
group by
tm.Team_ID
having
AgeInRange = AllTeamMembers
AND MaleCnt > 0
AND FemaleCnt > 0
关于MySQL:搜索 child 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10875884/