【发布时间】:2017-07-11 14:57:16
【问题描述】:
我有下面的表 SUBJ_SKILLS 有类似的记录
TCHR_ID | LINE_NBR | SUBJ | SUBJ_TYPE
--------| ------- | ---------- | ----------
1 | 1 | Maths | R
1 | 2 | 101 | U
2 | 1 | BehaviourialTech | U
3 | 2 | Maths | R
4 | 1 | RegionalLANG | U
5 | 3 | ForeignLANG | U
5 | 4 | Maths | R
6 | 2 | Science | R
7 | 1 | 101 | U
7 | 3 | Physics | R
..
..
我正在尝试检索如下记录(即教授多个不同科目的单一教师)
TCHR_ID | LINE_NBR | SUBJ | SUBJ_TYPE
--------| ------- | ---------- | ----------
5 | 3 | ForeignLANG | U
5 | 4 | Maths | R
7 | 1 | 101 | U
7 | 3 | Physics | R
1 | 1 | Maths | R
1 | 2 | 101 | U
这里,行号是唯一的,表示 TCHR_ID:5 教物理(LINE_NBR=1,但后来被删除)。因此,LINE_NBR 不会更新并保持原样。
我还有一个查找表 (SUBJ_LKUP) 用于主题及其类别/类型,如下所示(“R”代表常规主题,“U”代表独特主题)
SUBJ | SUBJ_TYPE
----------------- | ------------
Maths | R
Physics | R
ForeignLANG | U
101 | U
Science | R
BehaviourialTech | U
RegionalLANG | U
我解决此问题的方法是创建一个包含 2 条教师记录的表,并在基表 (SUBJ_SKILLS) 和新表上使用另一个查询来过滤掉不同的记录。我想出了以下查询..
查询-1:
create table tchr_with_2_subj as select SS.TCHR_ID
from SUBJ_SKILLS SS, SUBJ_LKUP SL
where SS.SUBJ = SL.SUBJ
and SL.SUBJ_TYPE IN ('R', 'U') AND SS.TCHR_ID IN
(select SS.TCHR_ID from SUBJ_SKILLS SS)
GROUP BY SS.TCHR_ID HAVING COUNT(*) = 2)
查询 2:
select SS.TCHR_ID from SUBJ_SKILLS SS, tchr_with_2_subj tw2s
where SS.TCHR_ID = tw2s.TCHR_ID
GROUP BY SS.TCHR_ID,SS.SUBJ_TYPE HAVING COUNT(*) > 1)
问题:
1) Query-1 中的“IN”条件导致问题和提取错误记录。
2) 有没有更好的方法来编写查询以使用单个查询提取匹配记录(即,而不是创建表)
有人可以帮我解决这个问题吗?
【问题讨论】:
-
不确定,为什么需要加入
SUBJ_SKILLS和SUBJ_LKUP。有没有具体原因,问题中没有提到? -
我可能有 SUBJ 为 NULL 或垃圾数据的机会