有谁能帮我写个sql啊,困惑好几天了,我的表是这样的:
科目表 
id,subjectname课程表
id,coursename课程和科目关联表
id,courseId,subjectId课程学习历史表
courseid,subjectId,userId每次学生学习后都要往历史记录中插入一条记录,我要查询这个学生没有学习过的课程对应的科目,不能用子查询,因为Mysql4.0

解决方案 »

  1.   

    忘记了,还有一个表:
    subject_to_user (科目和用户的关联表),老师创建了科目之后,然后在科目里边添加了课程,然后又把科目分配给了学生,学生每学习一次就保存到历史记录一次。subject_to_user表结构为id,subjectId,userId
      

  2.   

    怎么没有人回复呢?汗,mysql4.0超垃圾,既不支持子查询,也不支持存储过程
      

  3.   

     (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式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)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  4.   

    表结构是这样的:
    课程表(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     数据库
      

  5.   

    试试这个
    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
      

  6.   


    嗯,谢谢了,可以了,sql多时不研究了,都要忘记了。