有谁能帮我写个sql啊,困惑好几天了,我的表是这样的:
科目表
id,subjectname课程表
id,coursename课程和科目关联表
id,courseId,subjectId课程学习历史表
courseid,subjectId,userId每次学生学习后都要往历史记录中插入一条记录,我要查询这个学生没有学习过的课程对应的科目,不能用子查询,因为Mysql4.0
科目表
id,subjectname课程表
id,coursename课程和科目关联表
id,courseId,subjectId课程学习历史表
courseid,subjectId,userId每次学生学习后都要往历史记录中插入一条记录,我要查询这个学生没有学习过的课程对应的科目,不能用子查询,因为Mysql4.0
subject_to_user (科目和用户的关联表),老师创建了科目之后,然后在科目里边添加了课程,然后又把科目分配给了学生,学生每学习一次就保存到历史记录一次。subject_to_user表结构为id,subjectId,userId
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
课程表(course)
id course_name
1 函数
2 指针
3 java概述
4 java的并发
5 数据库存储过程科目表(subject)
id subject_name
1 C语言
2 java语言
3 数据库科目课程关联表(subject_to_course)
id subjectId courseId
1 1 1
2 1 2
3 2 3
4 2 4
5 3 5科目和用户的管理表(subject_to_user)
id subjectId userId
1 1 1
2 2 1
3 3 1课程学习历史表(study_course_history)
id courseId userId
1 1 1
2 2 1
3 3 1
我要查的是科目用户关联表中,userId = 1 的用户所对应的科目列表包含的所有courseId列表,这些列表在课程学习历史表中没有的courseId所对应的科目正确结果是:
id subject_name
2 java语言
3 数据库
select distinct c.id, distinct c.course_name from course as c
inner join subject_to_course as s on c.id = s.courseId
inner join subject_to_user as stu on stu.subjectId = s.id
left join study_course_history on as sch on sch.courseId = c.id
where sch.courseId = null and stu.userId = 1
嗯,谢谢了,可以了,sql多时不研究了,都要忘记了。