2017-03-25 12 views
0

私は3テーブル、A VOLUNTEERテーブル、TRAINING_EVENTSテーブル、およびTRAINING_INSTRUCTORテーブルを持つデータベースを持っています。MySQLネストされたクエリの書式設定

VOLUNTEERテーブルには、自動インクリメントVol_IDによってマークされた人物についてのフォーメーションが含まれています。

TRAINING_EVENTSテーブルには、自動増分でマークされたイベントの日時が含まれます。Event_IDまた、各イベントにHours_Creditedフィールドを割り当てます。これは、ボランティアがその特定のイベントのインストラクターであるために受け取ったクレジット時間数を示します。

TRAINING_INSTRUCTORテーブルには、Vol_IDEvent_idが含まれています。 (ボランティアがイベントのインストラクターであることを示す)。私はボランティアがで講師だったし、次のコードは、私が使用しようとするものであるが、ANでの結果、それらのイベントのために

を信じ時間を合計し、特定されたイベント見つかったクエリを持っていると思い

エラー。

あなたが INクエリ内の別名 TIを再利用している
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」をエイリアスとして2回使用しました:1つは外側、内側クエリの1つ – Psi

答えて

0

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のために引っ張って取り除くために編集された... TI2別名でこれを試してみてください。

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 

あなたが入力VOL_IDを持っているし、必要であればあなたがボランティアで出力し、ここでHOURS_CREDITEDの合計を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; 
関連する問題