0

私は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
4

3 に答える 3

3
SELECT  a.Tutor_ID,
        a.Name,
        COUNT(b.TUTOR_ID) TotalCount
FROM    Tutor a
        LEFT JOIN STU_TUTOR_MAPPING b
            ON a.Tutor_ID = b.TUTOR_ID
GROUP   BY a.Tutor_ID, a.Name

結合についてさらに詳しく知りたい場合は、以下のリンクにアクセスしてください。

上記のクエリはTUTOR、他のテーブルに一致するレコードがないかどうかに関係なく、テーブルのすべてのレコードを表示0し、 を使用しているため、合計数として表示されLEFT JOINます。他のテーブルに一致するレコードが少なくとも 1 つあるすべてのレコードを一覧表示する場合は、INNER JOINそれで十分です。

SELECT  a.Tutor_ID,
        a.Name,
        COUNT(*) TotalCount
FROM    Tutor a
        INNER JOIN STU_TUTOR_MAPPING b
            ON a.Tutor_ID = b.TUTOR_ID
GROUP   BY a.Tutor_ID, a.Name
于 2013-05-14T07:00:07.410 に答える
1

クエリで Join を使用するのはとても簡単です。JOIN について知らない場合は、リンク 1.リンク 2

于 2013-05-14T07:02:33.377 に答える
0

あなたはこのようにすることができます -

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, t2.MAX_STU_NUM
于 2013-05-14T07:07:40.110 に答える