MySQL嵌套查询格式
我有一个带有3个表格的数据库,A VOLUNTEER
表格,TRAINING_EVENTS
表格和TRAINING_INSTRUCTOR
表格。MySQL嵌套查询格式
VOLUNTEER
表格包含有关人标记为自动递增的Vol_ID
的信息。
TRAINING_EVENTS
表包含由自动递增的Event_ID
标记的事件的日期和时间。它还为每个活动分配一个Hours_Credited
字段,该字段表示志愿者获得多少学分作为该特定活动的指导员的学分。
TRAINING_INSTRUCTOR
表包含Vol_ID
和Event_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);
您的IN
查询中别名TI
重新使用。
试试这个与TI2
名称...
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 TI2.EVENT_ID
FROM VOLUNTEER AS V, TRAINING_INSTRUCTOR AS TI2
WHERE V.VOL_ID = TI2.VOL_ID AND V.VOL_ID = 3);
谢谢你的帮助。这工作完美。 – user5865015
编辑,以去除多余的加盟TI和拉所有VOL_IDs。
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;
您也可以使用正确的'join'语法获得很好的答案 – Psi
谢谢。这非常有帮助。 – user5865015
可以使用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
如果有输入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;
您使用了'TI'作为别名两次:一个在外部,内部查询 – Psi