如何解决交叉表查询
| 我有三张桌子。 课程 课程 名称 标记 标识 学生 课程 标记 学生 学生 名称 如何交叉查询这样的结果? 结果 表头 学生编号课程1课程2 ...课程N id1 mark1 mark2 ... markN id2 mark1 mark2 ... markN id3 mark1 mark2 ... markN解决方法
最好,我可以考虑是否使用
group_concat
函数。
因为列数的变化只是维护的噩梦。
您可以将coursegrades
字段中的值除以exploding
在php中的列表或客户端中任何逗号分隔符之间。
/*First make a list of coursenames for the header.*/
SELECT \'studentid\' as idstudent,\'studentname\' as studentname,GROUP_CONCAT(course.name ORDER BY couselist.idcourse) as coursegrades
FROM course
INNER JOIN (SELECT DISTINCT idcourse FROM mark) courselist
ON (courselist.idcourse = course.idcourse)
UNION ALL
/*UNION ALL this with a list of grades per course*/
SELECT idstudent,student.name as studentname,GROUP_CONCAT(IFNULL(mark.mark,\'\') ORDER BY courselist.idcourse) as coursegrades
FROM course
INNER JOIN (SELECT DISTINCT idcourse FROM mark) courselist
ON (courselist.idcourse = course.idcourse)
LEFT JOIN mark ON (mark.idcourse = courselist.idcourse)
INNER JOIN student ON (student.idstudent = mark.idstudent)
GROUP BY student
,首先,您应该具有多对一的外键关系,以确保根据学生表的idstudent字段(标记,课程)匹配表中的idstudent字段。
为了回答您的特定问题,不可能从数据库客户端返回这样的结果。也许如果您将某些内容作为过程编写,但不是使用基本SQL编写的。获得所需结果的最佳方法是对mark表进行简单查询,以获取idstudent和mark字段,然后使用另一种语言在外部进行操作。
因此查询将如下所示:
SELECT marks.idstudent,marks.mark,courses.name FROM marks,courses
WHERE marks.idcourse=courses.idcourse;
例如,您可以使用用PHP或Python编写的外部程序显示结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。