0

I have three tables in MS Access as follow:

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

Relation is as follow:

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

Please Help me write a query that can return Name of Students and All SubjectNames and Marks of that student.

Currently I have this query but it returns marks separately.

select Students.Name, Marks.Obtained, Subjects.Name from Marks
inner join Students on Marks.StudentName = Students.ID
halfer
  • 19,824
  • 17
  • 99
  • 186

5 Answers5

1

You have joined students and marks table with that Join Subjects table too

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 
Pரதீப்
  • 91,748
  • 19
  • 131
  • 172
0

try this:

select Students.Name, Marks.Obtained, Subjects.Name from Marks
inner join Students on Marks.Subject = Subjects.ID
Marks.StudentID = Students.ID
Dgan
  • 10,077
  • 1
  • 29
  • 51
0
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;
Wild Eagle
  • 41
  • 1
  • 4
0

Try this:

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
Ehm
  • 113
  • 1
  • 9
0

I would reorder this as follows:

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;

I hope that helps.

FirstLoser
  • 23
  • 1
  • 1
  • 3
  • does it become "select Students.Name as 'Student Name', Marks.Obtained as 'Mark Obtained', Subjects.Name as 'Subject' from Students AS Students inner join Marks as Marks on Students.ID = Marks.StudentName inner join Subjects AS Subjects on Marks.Subject = Marks.ID GO;"?? – Tariq Abdullah Dec 13 '14 at 13:08
  • Are you writing this in SSMS or Access? – FirstLoser Dec 13 '14 at 13:12
  • I am writing this in Access – Tariq Abdullah Dec 13 '14 at 13:13
  • 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.Name, Marks.Obtained, Subjects.Name; – FirstLoser Dec 13 '14 at 13:21
  • It works but the data is separated. Not grouped by name. It is just slight extension of what I already have .. since this query returns only name of subject in addition. what i need is that subject name should be treated as a column and marks of a particular student be displayed as column value. – Tariq Abdullah Dec 13 '14 at 13:24
  • Then there must be an error with your joins - I'd question this: Marks.Subject = Subjects.ID Marks.StudentID = Students.ID You also noted a column name in Marks as Subject.ID, but that doesn't conform to Access object naming rules. Check the fields you're joining on. – FirstLoser Dec 13 '14 at 13:26
  • It works but the data is separated. Not grouped by name. It is just slight extension of what I already have .. since this query returns only name of subject in addition. what i need is that subject name should be treated as a column and marks of a particular student be displayed as column value – Tariq Abdullah Dec 13 '14 at 13:27
  • SELECT Students.Name, Subjects.Name, Marks.Obtained FROM Students INNER JOIN (Marks INNER JOIN Subjects ON Marks.Subject = Subjects.ID) ON Students.ID = Marks.StudentID GROUP BY Students.Name, Subjects.Name, Marks.Obtained; – FirstLoser Dec 13 '14 at 13:32