mysql - MYSQL 从同一张表中选择不同的记录
问题描述
我正在研究小型学校数据库,我需要一些帮助来选择仅在第 1 周和第 2 周的不同日期预订的学生。
我的表结构如下:
ChildId Day Room Week
======= === ==== ====
1 1 20 1
1 2 20 1
2 1 20 2
3 1 20 1
3 2 20 1
3 1 20 2
===== === === ===
我想让所有满足以下条件的孩子:
- 仅在第二周预订(这是 ChildId 2,我可以从以下查询中获得)
SELECT DISTINCT b.childid FROM booking b where b.childid NOT IN (SELECT childid FROM bookingtemplate WHERE weekno = 1)
我也需要
- 第二周的所有孩子,他们的日子与第一周不同。这将是 ChildID 3,因为他在第 1 周的周一和周二以及第 2 周的周一预订。
我无法找到两个星期内日子不同的孩子:
谢谢
解决方案
您可以使用聚合和HAVING
子句中的条件来做到这一点:
SELECT ChildId
FROM booking
WHERE Week IN (1, 2)
GROUP BY ChildId
HAVING MIN(Week) = 2
OR GROUP_CONCAT(DISTINCT CASE WHEN Week = 1 THEN Day END ORDER BY Day) <>
GROUP_CONCAT(DISTINCT CASE WHEN Week = 2 THEN Day END ORDER BY Day);
请参阅演示。
推荐阅读
- python - 带有 Docker 错误“SessionStore”对象的 Django 没有属性“_session_cache”
- docker - 从 Jenkins 管道中的 docker 代理运行时,Ansible 失败
- google-apps-script - 谷歌表格脚本基于单元格值导入数据而不是重复信息
- flutter - Dart/Flutter 中 Money 的数据类型
- python - 如何在训练张量流期间设置层权重
- javascript - vue动态表单
- php - 使用 MySql 和 PHP 从具有多行的列中提取两个值
- gradle - IntelliJ 找不到 ANTLR 生成的源
- java - 如何分割 JTS 多边形
- java - 如何对Java文本文件中列中的数字求和?