MySQL加入逗号分隔字段

时间:2012-06-05 10:36:53

标签: mysql join

我有两张桌子。 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

3 个答案:

答案 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