0

誰かが必要な結果の正しい構文を得るのを手伝ってくれますか? 以下のクエリでは、サブクエリは 2 つのコース (A と B) を取得します。クエリ全体が保持されている期間を取得します。ただし、両方のクラスに共通する期間のみが必要です。

select m.period
  from course
  join meets m
 using (start_yy, school, class_cd)
  join section s
 using (start_yy, school, class_cd, section)
 where start_yy = '11'
   and school = 'MYSCH'
   and class_cd in (select cl.class_cd
                      from crslink cl, linkhead lh
                     where cl.start_yy = '11'
                       and cl.school = 'MYSCH'
                       and cl.seq_number = lh.seq_number)   
 order by period;

サブクエリの 2 つのクラスは複数の期間に保持されますが、期間 4 だけが両方に共通する期間です。どうすればその結果を得ることができますか?

結果: 1,2,4,7

必要: 4

クエリで使用されるフィールドを含むテーブル構造を次に示します。

TABLE_NAME,COLUMN_ID,COLUMN_NAME,DATA_TYPE,DATA_LENGTH
COURSE    ,1        ,START_YY   ,VARCHAR2 ,2
COURSE    ,2        ,SCHOOL     ,VARCHAR2 ,4
COURSE    ,3        ,CLASS_CD   ,VARCHAR2 ,10
CRSLINK   ,1        ,START_YY   ,VARCHAR2 ,2
CRSLINK   ,2        ,SCHOOL     ,VARCHAR2 ,4
CRSLINK   ,3        ,CLASS_CD   ,VARCHAR2 ,10
CRSLINK   ,4        ,SEQ_NUMBER ,NUMBER   ,22
LINKHEAD  ,1        ,START_YY   ,VARCHAR2 ,2
LINKHEAD  ,2        ,SCHOOL     ,VARCHAR2 ,4
LINKHEAD  ,7        ,SEQ_NUMBER ,NUMBER   ,22
MEETS     ,1        ,START_YY   ,VARCHAR2 ,2
MEETS     ,2        ,SCHOOL     ,VARCHAR2 ,4
MEETS     ,3        ,CLASS_CD   ,VARCHAR2 ,10
MEETS     ,4        ,SECTION    ,VARCHAR2 ,3
MEETS     ,6        ,PERIOD     ,VARCHAR2 ,2
SECTION   ,1        ,START_YY   ,VARCHAR2 ,2
SECTION   ,2        ,SCHOOL     ,VARCHAR2 ,4
SECTION   ,3        ,CLASS_CD   ,VARCHAR2 ,10
SECTION   ,4        ,SECTION    ,VARCHAR2 ,3
4

1 に答える 1

0
select distinct m.period
  from course
  join meets m
 using (start_yy, school, class_cd)
  join section s
 using (start_yy, school, class_cd, section)
 where start_yy = '11'
   and school = 'MYSCH'
   and class_cd exists (select 1 
                      from crslink cl, linkhead lh
                     where cl.class_cd =course.class_cd 
                         And cl.start_yy = '11'
                       and cl.school = 'MYSCH'
                       and cl.seq_number = lh.seq_number)   
 order by period;

第二の解決策:

次のクエリの where 句でテーブル名の前に 3 つのフィールドを追加します。

select m.period
  from course
  join meets m
 using (start_yy, school, class_cd)
  join section s
 using (start_yy, school, class_cd, section)
 join 
 crslink cl on cl.class_cd = class_cd
 join 
 linkhead lh on cl.seq_number = lh.seq_number
 where start_yy = '11'
   and school = 'MYSCH'
   and class_cd 
   and cl.start_yy = '11'
   and cl.school = 'MYSCH'
   and cl.class_cd is not null
   and lh.seq_number is not null
 order by period;
于 2012-05-03T14:09:16.257 に答える