私は3つのテーブルを持っています
TABLE "TUTOR"
TUTOR_ID NMAE
---------------
1 N1
2 N2
3 N3
4 N4
TABLE "TUTOR_SETTING"
TUTOR_ID MAX_STU_NUM
----------------------
1 5
2 6
TABLE "STU_TUTOR_MAPPING"
----------------------
STU_ID TUTOR_ID
A 1
B 2
C 1
D 1
そして、以下の 3 つの SQL を 1 つの SQL に結合したいと考えています。
1. SELECT * FROM TUTOR t1
2. SELECT * FROM TUTOR_SETTING t2 where t2.TUTOR_ID=t1.TUTOR_ID
3. SELECT COUNT(t3.STU_ID) FROM STU_TUTOR_MAPPING t3 WHERE t3.TUTOR_ID=t1.TUTOR_ID GROUP BY T1.TUTOR_ID
期待される結果:テーブル「TUTOR」からすべてを選択し、「TUTOR_SETTING」を結合し、「STU_TURTOR_MAPPING」を結合し、同じtutor_idがある場合は「STU_TUTOR_MAPPING」の行もカウントします。
TUTOR_ID NAME MAX_STU_NUM TOTAL_STU_NUM
-------------------------------------------------
1 N1 5 3
2 N2 6 1
3 N3 null
4 N4 null
私はこの方法を試しました:
SELECT t1.TUTOR_ID, t1.NAME, t2.MAX_STU_NUM, count(t3.STU_ID)
FROM TUTOR t1
LEFT JOIN TUTOR_SETTING t2 on (t1.TUTOR_ID=t2.TUTOR_ID)
LEFT JOIN stu_tutor_mapping t3 on (t1.TUTOR_ID=t3.TUTOR_ID)
GROUP BY t1.TUTOR_ID, t1.NAME;
しかし、データベースはエラーを報告します:
ORA-00979: not a GROUP BY expression
00979. 00000 - "not a GROUP BY expression"
*Cause:
*Action:
Error at Line: 1 Column: 30
最後に、Google でこの問題を解決しました。SQL ステートメントは次のとおりです。
SELECT t1.TUTOR_ID, t1.NAME, t2.MAX_STU_NUM, t3.stu_allocated
FROM TUTOR t1
LEFT JOIN TUTOR_SETTING t2 on (t1.TUTOR_ID=t2.TUTOR_ID)
LEFT JOIN
(select tutor_id ,count(*) as TOTAL_STU_NUM from stu_turtor_mapping group by
tutor_id) t3 on t3.TUTOR_ID=t1.TUTOR_ID