在一个SQL语句中连接多个select语句

时间:2016-03-07 16:04:34

标签: mysql sql select join average

我正在尝试将两个sql语句合并为一个,但没有成功。

我理想情况下将Average查询添加到第一个sql语句的列末尾。

第一声明:

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')

第二声明:

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

2 个答案:

答案 0 :(得分:3)

您可以在select中使用子查询,如下所示:

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')

答案 1 :(得分:2)

你可以尝试

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

由于您没有连接条件,它将创建两个查询的笛卡尔积(即第一个子选择的每一行,第二个子选择的每一行)。由于第二个子选择只有一行,它将为您提供预期的结果。