2017-03-25 270 views
0

我有一個帶有3個表格的數據庫,A VOLUNTEER表格,TRAINING_EVENTS表格和TRAINING_INSTRUCTOR表格。MySQL嵌套查詢格式

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); 
+0

您使用了'TI'作爲別名兩次:一個在外部,內部查詢 – Psi

回答

0

您的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); 
+0

謝謝你的幫助。這工作完美。 – user5865015

0

編輯,以去除多餘的加盟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; 
+0

您也可以使用正確的'join'語法獲得很好的答案 – Psi

+0

謝謝。這非常有幫助。 – user5865015

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 

你可以在這裏嘗試http://sqlfiddle.com/#!9/b9694a/4

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;