【问题标题】:SQL Join operation in multiple tables多个表中的 SQL Join 操作
【发布时间】:2014-12-13 12:12:40
【问题描述】:

我在 MS Access 中有如下三个表:

--Students(ID, Name, Class)
--Subjects (ID, Name)
--Marks (ID, StudentID, Subject.ID)

关系如下:

Marks.Subject = Subjects.ID
Marks.StudentID = Students.ID

请帮助我编写一个查询,该查询可以返回学生姓名以及该学生的所有主题名和分数。

目前我有这个查询,但它单独返回标记。

select Students.Name, Marks.Obtained, Subjects.Name from Marks
inner join Students on Marks.StudentName = Students.ID

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    您也加入了 studentsmarks 表,加入了 Subjects

    SELECT students.NAME, 
           marks.obtained, 
           subjects.NAME 
    FROM  ( marks 
           INNER JOIN students 
                   ON marks.studentname = students.id )
           INNER JOIN subjects 
                   ON marks.subject = subjects.id 
    

    【讨论】:

    • 它说“查询表达式中的语法错误(缺少运算符)“Marks.StudentName = Students.ID JOIN Subjects ON Marks.Subject = Subjects.I”。
    • @TariqAbdullah - 现在检查。看起来女士访问确实支持join它应该是Inner Join
    • @TariqAbdullah - 现在更新检查。我的坏不擅长 Ms 访问语法
    • @TariqAbdullah - 对于包含多个连接的查询,Access 似乎需要在 FROM 子句中使用括号。
    • this:SELECT Students.Name, Marks.Obtained, Subjects.Name FROM (Marks INNER JOIN Students ON Marks.StudentName = Students.ID INNER JOIN Subjects ON Marks.Subject = Subjects.ID) 不工作
    【解决方案2】:
    This will help you : 
    
    
    
     select Students.Name, Marks.Obtained, Subjects.Name from Marks
        inner join Students on Marks.StudentName = Students.ID
        inner join Subjects on Marks.Subject = Subjects.ID;
    

    【讨论】:

      【解决方案3】:

      试试这个:

      select Students.Name, Marks.Obtained, Subjects.Name from Marks
      inner join Students on Marks.Subject = Subjects.ID
      Marks.StudentID = Students.ID
      

      【讨论】:

      • 此查询中的Subjects 是什么?
      【解决方案4】:

      试试这个:

      SELECT a.name, b.obtained, c.name
      FROM studentTable a
      INNER JOIN marksTable b ON a.ID = b.StudentID
      INNER JOIN subjectsTable c ON b.Subject.ID = c.ID
      

      【讨论】:

        【解决方案5】:

        我会重新排序如下:

        select A1.Name as 'Student Name'
          , A3.Name as 'Subject'
          , A2.Obtained as 'Mark Obtained' 
        from Students AS A1  
             inner join Marks as A2 on A1.ID = A2.StudentID
             inner join Subjects AS A3 on A2.Subject = A3.ID GO;
        

        希望对你有帮助。

        【讨论】:

        • 它会变成“选择 Students.Name 作为‘学生姓名’,Marks.Obtained 作为‘获得的标记’,Subjects.Name 作为‘Subject’ from Students AS 学生内部加入标记作为学生的标记。 ID = Marks.StudentName inner join Subjects AS Subjects on Marks.Subject = Marks.ID GO;"??
        • 你是用 SSMS 还是 Access 写这个?
        • 我在 Access 中写这个
        • SELECT Students.Name, Marks.Obtained, Subjects.Name FROM Students INNER JOIN (Marks INNER JOIN Subjects ON Marks.Subject = Subjects.ID) ON Students.ID = Marks.StudentID GROUP BY Students。姓名,标记。获得,主题。姓名;
        • 它可以工作,但数据是分开的。不按名称分组。这只是我已经拥有的内容的轻微扩展.. 因为此查询仅返回主题名称。我需要的是学科名称应该被视为一列,特定学生的分数显示为列值。
        猜你喜欢
        • 2021-03-27
        • 2013-01-29
        • 2012-05-22
        • 1970-01-01
        • 2021-12-23
        • 2013-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多