我有两张桌子。 First Table是一个batch
表,在“batch”字段中包含以逗号分隔的学生ID
batch
--------------
id batch
--------------
1 1,2
2 3,4
第二个表是标记
marks
----------------------
id studentid subject marks
1 1 English 50
2 2 English 40
3 3 English 70
4 1 Math 65
5 4 English 66
6 5 English 75
7 2 Math 55
我们如何找到第一批id = 1的学生,他们在不使用子查询的情况下使用英语获得超过45分的分数。
我发现使用单个查询完成此问题的问题是我们不能在JOIN语句中使用 IN 作为关联运算符
以下查询需要进行哪些更改才能使其正常工作?
SELECT * FROM batch
INNER JOIN marks ON marks.studentid IN(batch.batch) where batch.id = 1
答案 0 :(得分:9)
SELECT m.studentId
FROM batch b
JOIN marks m
ON FIND_IN_SET(m.studentId, b.batch)
AND m.subject = 'English'
GROUP BY
m.studentId
HAVING SUM(marks) > 45
答案 1 :(得分:0)
我认为正确的解决方案是重构学生 - 批次关系。为什么不将“批处理”表中的外键添加到“学生”表中。学生1和2将参考第1批,学生3和4将参考第2批。
答案 2 :(得分:0)
您不希望在一个数据库字段中存储两个值 - 违反First Normal Form,而当您尝试使用SQL分析数据时,您是going to have a bad time。
我无法完全理解您在问题描述中使用不同的ID所得到的内容 - 但我认为您希望批处理表更像:
batch
--------------
id batch
--------------
1 1
1 2
2 3
2 4