sql 连表查询问题表student 有id,name,sc_id 3个字段
表course   有bookid,bookname 2i个字段sc_id 和 bookid 是外键关系我想查询 name  和  对应的name所有的bookname个数
意思就是 想查询某个学生所选择的所有课程的数量
打印结果是   一个学生名字   学生选择的课程数量

解决方案 »

  1.   

    student(id ,name) ;
    course(bookid,bookname) ;
    stdcur(sc_id ,id, bookid) ;
    mysql> select * from student;
    +------+------+-------+
    | id   | name | sc_id |
    +------+------+-------+
    |    1 | aa   |     0 |
    |    2 | bb   |     0 |
    +------+------+-------+
    mysql> select * from  stdcur;
    +-------+------+--------+
    | sc_id | id   | bookid |
    +-------+------+--------+
    |     1 |    1 |      1 |
    |     2 |    1 |      2 |
    |     3 |    1 |      4 |
    |     2 |    2 |      2 |
    +-------+------+--------+
    4 rows in set (0.00 sec)select s.name , count(bookid) from stdcur sc , student s where 
    s.id = sc.id 
    group by s.name ;
    mysql> select s.name , count(bookid) from stdcur sc , student s where
        -> s.id = sc.id
        -> group by s.name ;
    +------+---------------+
    | name | count(bookid) |
    +------+---------------+
    | aa   |             3 |
    | bb   |             1 |
    +------+---------------+
    2 rows in set (0.00 sec)是不是这样子的结果啊 
      

  2.   

    看的有点无语这是我得出的东西。。student 
    id name sc_id
    1   zs   1
    2   ls   2
    3   ww   1course
    bookid bookname
    1        math
    2        english
      

  3.   

    select name,(select count(bookid) from course where bookid=sc_id) from student group by name
      

  4.   

    首先要理清表之间的关系。这两个表的关系应该是多对多的关系,一个学生可以学习多门学科,一门学科可以有多个学生学习,因此学生表和课程表不是一对多的关系,题目本身就有问题。一楼是用一个中间表来解决,把两张表的多对多的关系转化成三张表的两个一对多的关系,是个很好的解决办法。还是先好好学习表的关系和三范式等基础知识吧,否则没法写sql语句。
      

  5.   

    首先要理清表之间的关系。这两个表的关系应该是多对多的关系,一个学生可以学习多门学科,一门学科可以有多个学生学习,因此学生表和课程表不是一对多的关系,题目本身就有问题。一楼是用一个中间表来解决,把两张表的多对多的关系转化成三张表的两个一对多的关系,是个很好的解决办法。还是先好好学习表的关系和三范式等基础知识吧,否则没法写sql语句。