MySQL:搜索 child 记录

标签 mysql sql database

假设有 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 |
-------------------------------------------

如何搜索这样的内容:

  1. 所有年龄在 18 至 25 岁之间的男性团队的列表。
  2. 所有男性和女性团队的列表,其中任一性别的年龄在 18 至 25 岁之间。
  3. 等等

我基本上正在寻找有关如何在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/

相关文章:

mysql - SQL:根据多个条件统计行数,单个查询

java - 使用外部硬盘写入和存储 mysql 数据库

sql - Multi-Tenancy 与多个数据库

database - Multi-Tenancy 网站、独立数据库——如何推出模式/共享数据更新?

mysql - 数据库设计决策 : multiple (mysql) databases or 1 database?

c# - 如何将数据从一个数据库导入到另一个数据库

mysql - 在 MySQL 中对有序数据对进行排序/排序?

php - 在发布/更新 Wordpress 页面时运行代码

MySQL 对 varbinary 字段进行不区分大小写的搜索?

php - 以特定顺序检索数据的单个 SQL 查询(不是 ASC/DESC)