【问题标题】:SQL three tables to return one rowSQL 三表返回一行
【发布时间】:2017-10-05 22:04:07
【问题描述】:

如果这个问题不是很干净,大家很抱歉,但问题如下

我有一个与此类似的家庭作业任务。 写一个查询来返回这个学生在姓氏“字段”中选择了多少科目

这三个表是:

Students:
     StudentID
     FirstName
     LastName

StudentCourses:
      StudentCourseID
      StudentID
      CourseID

Courses:
      Maths
      Science
      English
      P.E
      Drama
      Film Studies

我有类似的东西

SELECT Students.studentID, 
       Students.Lastname, 
       Students.CourseID 
  FROM Students 
 WHERE Students.LastName = "Field"
 INNER JOIN StudentCourses 
    ON Student.CourseID = StudentCourses.CourseID
  FULL JOIN Student 
    ON Student.RoleID = Courses.CourseID

这是写的,所以我无法测试它,但这对任何人来说似乎都是正确的吗?

【问题讨论】:

  • 不行,看看WHERE在哪里被允许;此外,不计算(提示提示)“多少”...并引用不存在的表。
  • 您几乎可以肯定不想要 FULL JOIN。什么是“学生”表?和“学生”不一样?你的问题中没有提到。以及为什么将字段“RoleID”加入“CourseID”。它们似乎也不匹配
  • mysqltsql 标签通常是不兼容的。您是否需要适用于各种 SQL 方言的解决方案?

标签: mysql sql tsql


【解决方案1】:

使用 COUNT() 函数查找学生修读的课程数量,并使用 WHERE 子句将学生的姓氏过滤为“字段”。

SELECT s.StudentID, s.LastName, COUNT(sc.CourseID)
FROM Students s 
JOIN StudentCourses sc 
ON s.StudentID = sc.StudentID 
WHERE  s.LastName = 'Field’;

【讨论】:

    【解决方案2】:

    最后应该到哪里。您实际上并不需要第三次加入课程表,因为您没有从中选择任何内容。

    SELECT st.STUDENTID, 
           st.LASTNAME, 
           count(stc.COURSEID) as COURSECOUNT
    FROM   STUDENTS st 
           INNER JOIN STUDENTCOURSES stc 
                   ON st.COURSEID = stc.COURSEID 
    WHERE  st.LASTNAME = 'Field' 
    

    【讨论】:

      【解决方案3】:

      您可以尝试以下查询。 WHERE 子句应该在 FROMJOIN 子句之后

      SELECT s.studentid,
             s.lastname,
             COUNT(sc.courseid)
        FROM student s
        JOIN studentcourses sc
          ON s.studentid = sc.studentid
       WHERE s.lastname = 'Field'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-02
        • 1970-01-01
        • 2010-10-27
        • 1970-01-01
        • 2016-01-14
        • 2021-03-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多