【问题标题】:Help with SQL statement (JOIN)SQL 语句帮助 (JOIN)
【发布时间】:2010-03-11 14:06:21
【问题描述】:

我在使用必须查找参加课程的学生人数的 SQL 语句时遇到了一些问题。 我的数据库设计如下所示:

课程: 编号 |课程名称

学生: 编号 |名字

为了连接这两个多对多关系,我有一个表:

course_student: 编号 | course_id |学生号

我想要了解有多少学生正在参加名为“数据库设计”的课程。我知道 ID 是“1”,但假设我不知道,我的 SQL 语句会是什么样子?

我尝试了几种不同的语句,使用不同的连接,首先从 course 表中选择正确的 ID,其中名称是“数据库设计”,接下来我要在我的 中搜索course_student 表,其中 course_id 等于创建的 id(在本例中为 1),并且所有 student_id 都连接到此 id。

我知道这是一个有点复杂的描述,所以请告诉我是否需要以更好的方式解释它。

谢谢 梅斯蒂卡

【问题讨论】:

    标签: sql join


    【解决方案1】:

    你可以试试

    SELECT  COUNT(cs.student_id)
    FROM    Course c INNER JOIN
            course_student cs ON c.id = cs.course_id
    WHERE   c.course_name = 'Database Design'
    

    您不必加入 Students 表,因为您已经在 course_student 表中拥有 ID,因此可以少 1 次加入。

    【讨论】:

    • 该死的你和你的打字技巧
    • 很好,@astander。你发帖的时候正在解决。 GJ。
    【解决方案2】:

    只是风格略有不同,但结果相同

    select COUNT(cs.student_id) as counter from Course c, course_student cs where c.id = cs.course_id and c.course_name = 'Database Design'

    【讨论】:

    • 隐式连接不好。请不要鼓励使用这种糟糕的技术。
    • 长期以来,我一直非常成功地使用该技术。请解释这有什么问题。
    【解决方案3】:
    SELECT count(a.id)
    FROM Course a
    INNER JOIN Course_Student b
    ON a.id = b.course_id
    WHERE a.course_name = 'Database Design'
    

    【讨论】:

    • 看起来像外星人打败了我。
    • 对于第二个示例,您甚至不必加入表 Course
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多