MySQL嵌套查询格式化

时间:2017-03-25 21:53:13

标签: mysql sql nested-queries

我有一个包含3个表的数据库,一个VOLUNTEER表,一个TRAINING_EVENTS表和一个TRAINING_INSTRUCTOR表。

VOLUNTEER表包含有关以自动递增Vol_ID为标记的人的信息。

TRAINING_EVENTS表包含由自动递增的Event_ID标记的事件的日期和时间。它还为每个事件分配一个Hours_Credited字段,表示志愿者作为该特定事件的指导者所获得的学分时数。

TRAINING_INSTRUCTOR表包含Vol_IDEvent_id。 (表明哪个志愿者是活动的指导者)。

我想查询一个志愿者是教师的特定事件,然后将这些事件的计入时间加起来

以下代码是我尝试使用的代码,但会导致错误。

SELECT SUM(Hours_Credited)
FROM TRAINING_EVENTS AS TE, TRAINING_INSTRUCTOR AS TI
WHERE TE.EVENT_ID = TI.EVENT_ID AND TI.EVENT_ID IN
    (SELECT TI.EVENT_ID
    FROM VOLUNTEER AS V, TRAINING_INSTRUCTOR AS TI
    WHERE V.VOL_ID = TI.VOL_ID AND V.VOL_ID = 3);

4 个答案:

答案 0 :(得分:0)

您正在重复使用remoteC查询中的别名git fetch

使用TI别名...

尝试此操作
IN

答案 1 :(得分:0)

已编辑删除与TI的冗余连接并提取所有VOL_ID。

SELECT TI.VOL_ID, SUM(TE.Hours_Credited) as HOURS_CREDITED
FROM TRAINING_EVENTS AS TE,
(SELECT TI.EVENT_ID, TI.VOL_ID
    FROM VOLUNTEER AS V, TRAINING_INSTRUCTOR AS TI
    WHERE V.VOL_ID = TI.VOL_ID) AS TI
WHERE TE.EVENT_ID = TI.EVENT_ID
GROUP BY TI.VOL_ID
ORDER BY TI.VOL_ID;

答案 2 :(得分:0)

您可以使用JOIN执行此操作:

SELECT v.NAME, SUM(Hours_Credited) as 'Hours_Credited'
FROM TRAINING_INSTRUCTOR TI
join TRAINING_EVENTS TE
on TI.Event_ID = TE.Event_ID
join VOLUNTEER V
on TI.VOL_ID = V.VOL_ID
group by V.VOL_ID

您可以在tutorial

尝试

答案 3 :(得分:0)

如果您有输入VOL_ID,并且想要输出志愿者的HOURS_CREDITED总和,则此查询将解决:

SELECT SUM(TE.Hours_Credited)
 FROM 
TRAINING_EVENTS AS TE, TRAINING_INSTRUCTOR AS TI
 WHERE 
TE.EVENT_ID = TI.EVENT_ID AND TI.VOL_ID = 3;