简体   繁体   中英

Joining mutiple select statements in one SQL statement

I am trying to join two sql statements into one but have had no success.

I would ideally like the Average query to be added to the end of the columns from the first sql statement.

First statement:

SELECT Modules.UserID, Module_Info.ModuleTitle, Modules.ModuleMarks, Modules.ExamMark, Modules.AssignmentMark, MarkClassification.MarkDescription
FROM Module_Info 
INNER JOIN Modules ON Module_Info.ModuleID = Modules.ModuleID 
INNER JOIN MarkClassification ON Modules.MarkCodeDescription = MarkClassification.MarkId
WHERE(Modules.UserID = '8')

Second statement:

SELECT AVG(Modules.ExamMark) AS Average    
FROM Module_Info     
INNER JOIN Modules ON Module_Info.ModuleID = Modules.ModuleID
WHERE (Modules.ModuleID = '2')

You can use a sub query in the select for that, like this:

SELECT Modules.UserID, Module_Info.ModuleTitle, Modules.ModuleMarks,
       Modules.ExamMark, Modules.AssignmentMark, MarkClassification.MarkDescription,
       (SELECT AVG(Modules.ExamMark) 
        FROM Module_Info 
        INNER JOIN Modules ON Module_Info.ModuleID = Modules.ModuleID
        WHERE (Modules.ModuleID = '2')) as Average
FROM Module_Info 
INNER JOIN Modules
 ON Module_Info.ModuleID = Modules.ModuleID 
INNER JOIN MarkClassification
 ON Modules.MarkCodeDescription = MarkClassification.MarkId
WHERE(Modules.UserID = '8')

you can try

SELECT * FROM

(SELECT Modules.UserID, Module_Info.ModuleTitle, Modules.ModuleMarks, Modules.ExamMark, Modules.AssignmentMark, MarkClassification.MarkDescription
FROM Module_Info
INNER JOIN Modules ON Module_Info.ModuleID = Modules.ModuleID
INNER JOIN MarkClassification ON Modules.MarkCodeDescription = MarkClassification.MarkId
WHERE(Modules.UserID = '8')) t1

JOIN

(SELECT AVG(Modules.ExamMark) AS Average
FROM Module_Info
INNER JOIN Modules ON Module_Info.ModuleID = Modules.ModuleID
WHERE (Modules.ModuleID = '2')) t2

Since you do not have a join condition, it will create a cartesian product of the two queries (ie each row of the first subselect, with each row of the second subselect). Since the 2nd subselect only has one row, it will give you your expected result.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM