SQL查询2表

时间:2013-09-23 02:49:07

标签: sql oracle

我有两张桌子:老师,&类。 这是描述:

TEACHER
 ----------------
 TEACHER_ID
 FIRST_NAME
 LAST_NAME
 TYPE_CODE
 HOME_ROOM_NUM
 PHONE_NUM
 START_DATE
 HOME_STATE
 SCHOOL_ID

 Class
 --------------------
 CLASS_ID
 CLASS_NAME
 TEACHER_ID
 MAX_SEATS_AVAILABLE

我试图弄清楚如何计算给定教师教授的课程数量。 这是我尝试过的: 1. Lisa Jones教授了多少课程,如果有的话?

SQL> select teacher.last_name, teacher.first_name, class.class_name as 
  2  from teacher, class
  3  where teacher.teacher_id = '2'
  4  AND class.teacher_id = '2';

这是我得到的结果:

LAST_NAME         FIRST_NAME        CLASS_ID CLASS_NAME           TEACHER_ID  MAX_SEATS_AVAILABLE

----------------- ----------------- -------- -------------------- ----------- --------------------
JONES             LISA               2       Basic CALCULUS       2           10
JONES             LISA               9       Physics 230          2           20

我只需要教师姓名,身份证明和班级#,没有COUNT功能的运气。

2 个答案:

答案 0 :(得分:4)

我建议删除已弃用的隐式连接并替换为标准显式连接: 只需要GROUP BY即可让COUNT()正常工作。

SELECT t.last_name, t.first_name, t.Teacher_ID, COUNT(DISTINCT CLASS_ID) as Classes_Count 
FROM teacher t
JOIN class c
  ON t.Teacher_ID = c.Teacher_ID
WHERE t.Teacher_ID = '2'
GROUP BY t.last_name, t.first_name, t.Teacher_ID

根据数据的性质,您可能需要DISTINCT,也可能不需要{{1}}。

答案 1 :(得分:0)

我认为@GOAT CO解决方案是正确的。 Thi squery在没有JOIN声明的情况下工作:

select t.last_name, t.first_name, c.class_name, COUNT(DISTINCT c.CLASS_ID) as Classes_Count from teacher t, class c where t.teacher_id = c.teacher_id and t.teacher_id = 1 GROUP BY t.LAST_NAME, t.FIRST_NAME, t.TEACHER_ID;

编辑:现在我为Teacher和Class表添加别名,并将group语句添加到脚本中。你能试试吗?我只在小提琴上测试过。

这是SQL FIDDLE link.

EDIT2 :同时我检查ORA-00937: not a single-group group function并找到this和此topic。但是这个脚本没有得到这个例外。如果您修改了声明,请分享!