我有3个表如何结合三个表导致一个SQL查询
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
,我想combile低于3 SQL到一个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”和JOIN“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
最后,我决心通过谷歌这个问题,这里是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
哪个RDBMS?你想要的输出是什么?你有什么尝试? – hims056 2013-05-14 07:00:13
你想加入这个表或者你怎么能指望从这个 – 2013-05-14 07:00:33
这是ORACLE Express数据库造成的,我想查询表“家教”,并加入“TUTOR_SETTING”,并加入“STU_TURTOR_MAPPING”,也算“STU_TUTOR_MAPPING”的行时有相同的tutor_id。 – sureone 2013-05-14 07:09:30