2017-03-25 5 views
0

테이블 A VOLUNTEER, 테이블 TRAINING_EVENTS 및 테이블 TRAINING_INSTRUCTOR 3 개의 테이블이 있습니다.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합니다.

중복 제거 TI에 가입하고 모든 VOL_IDs 위해 끌어 할 ... 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

편집을이보십시오.

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를 사용하여 수행 할 수 있습니다 자원 봉사자에 의해 출력 HOURS_CREDITED의 합을 당신이 입력 VOL_ID이있는 경우

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

그것을 시도 할 수 있습니다 당신이 원하는, 이 쿼리는 다음을 해결합니다 :

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;