我正在研究大学ERP软件,我无法在以下问题上找到解决方案。我在这里解释一下这个问题
表学生。
+----+--------+--------+
| id | enroll | sub_id |
+----+--------+--------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
| 4 | 2 | 2 |
| 5 | 2 | 3 |
| 6 | 3 | 1 |
| 7 | 3 | 2 |
+----+--------+--------+
要求 - 在学生表中,仅获取那些注册号码。其中包含sub_id 1& 2如果有任何注册号码。分配1,2& 3那么它不应该进入结果。
我尝试使用 IN 功能,但我不会给出正确的结果。 请建议我解决这个问题。 感谢名单...
答案 0 :(得分:0)
使用条件聚合:
SELECT t1.id, t1.enroll, t1.sub_id
FROM Student t1
INNER JOIN
(
SELECT enroll,
SUM(CASE WHEN sub_id IN (1, 2) THEN 1 ELSE 0 END) AS subCount
FROM Student
GROUP BY enroll
HAVING subCount = 2 AND COUNT(*) = 2
) t2
ON t1.enroll = t2.enroll
此查询中的技巧是HAVING
子句,该子句限制注册了(1, 2)
子注册,仅 (1, 2)
子注册的注册。
请按照以下链接查看正在运行的演示:
答案 1 :(得分:0)
我很难确切地从你的描述中找出你想要的东西,但这会为你的例子返回1,3
SELECT DISTINCT enroll FROM Student
WHERE enroll NOT IN
(SELECT enroll FROM Student WHERE sub_id NOT IN (1,2))