Oracle SQL: necesita sintaxis para reducir el resultado en la consulta

¿Puede alguien ayudarme a obtener la sintaxis correcta para los resultados que necesito? En la consulta a continuación, la subconsulta obtiene dos cursos (A y B). Toda la consulta obtiene el período en que se llevan a cabo. Sin embargo, solo quiero el período que ambas clases tienen en común.

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;

Las dos clases en la subconsulta tienen varios períodos, pero el período 4 es el único período que tienen en común. ¿Cómo obtengo ese resultado?

Los resultados son: 1,2,4,7

necesito: 4

Aquí están las estructuras de la tabla que contienen los campos utilizados en la consulta.

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

preguntado el 03 de mayo de 12 a las 15:05

deberá explicar los valores de la columna con más detalle porque no puedo entender qué significan ... -

¿Podrías publicar la estructura de tus tablas? -

Los campos start_yy, school y class_cd pertenecen a qué tabla en la consulta externa:

escriba la estructura de la tabla en la publicación. -

1 Respuestas

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;

Segunda solución:

prefije el nombre de la tabla con los tres campos en la cláusula where en la siguiente consulta.

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;

contestado el 03 de mayo de 12 a las 15:05

Puedo crear el sql usando la combinación izquierda si antepone el nombre de la tabla con campos con todos los campos en la consulta que publicó. Eso será más legible. - Romil Kumar jainista

Lo sentimos, los resultados no se muestran formateados. Es número de fila, clase, sección y período - Dan T

campos start_yy , school y class_cd en la cláusula where de la consulta externa a la que pertenece la tabla. - Romil Kumar jainista

La consulta interna está recuperando clases que deben programarse como un enlace por período. La consulta externa son las clases, las secciones y los horarios de las reuniones (es decir, el período). Una clase puede estar disponible en varios períodos; sin embargo, el "enlace" dice que estas dos clases deben programarse en el mismo período. El período 4 es el único período común entre los dos. Necesito 4 para ser el único resultado. - Dan T

Publiqué una edición de mi consulta original con prefijos. Los tres campos que cuestionas conforman la clave de curso y encuentros. ¿Eso responde a tu pregunta, Romil? - Dan T

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.