varias tablas right outer natural multiple left inner full ejemplo oracle join

tablas - right join oracle



las uniones externas del orĂ¡culo no muestran los valores nulos correctos (2)

O usando la sintaxis Oracle en lugar de ansi

select a.refnum, b.refnum, c.refnum from myTable a, mytable b, mytable c where a.contid=b.contid(+) and a.contid=c.contid(+) and a.type = 90000 and b.type(+) = 10000 and c.type(+) = 20000; REFNUM REFNUM REFNUM ---------- ---------- ---------- 1 6 2 4 7 3 5 8

Tengo un problema con la creación de una consulta en Oracle que no parece querer unirse a los valores perdidos

la mesa que tengo es esta:

table myTable(refnum, contid, type) values are: 1, 10, 90000 2, 20, 90000 3, 30, 90000 4, 20, 10000 5, 30, 10000 6, 10, 20000 7, 20, 20000 8, 30, 20000

un desglose de los campos que estoy buscando es este:

select a.refnum from myTable a where type = 90000 select b.refnum from myTable b where type = 10000 and contid in (select contid from myTable where type = 90000) select c.refnum from myTable c where type = 20000 and contid in (select contid from myTable where type = 90000)

el resultado de la consulta que estoy buscando es este:

a.refnum, b.refnum, c.refnum

pensé que esto funcionaría:

select a.refnum, b.refnum, c.refnum from myTable a left outer join myTable b on (a.contid = b.contid) left outer join myTable c on (a.contid = c.contid) where a.id_tp_cd = 90000 and b.id_tp_cd = 10000 and c.id_tp_cd = 20000

entonces los valores deberían ser:

1, null, 6 2, 4, 7 3, 5, 8

pero solo está regresando:

2, 4, 7 3, 5, 8

pensé que left joins mostraría todos los valores de la izquierda y crearía un nulo para la derecha.

ayuda :(


Tiene razón al decir que las combinaciones de la izquierda devolverán valores nulos para el derecho donde no hay coincidencia, pero no permite que se devuelvan estos valores nulos cuando agrega esta restricción a su cláusula where:

and b.id_tp_cd = 10000 and c.id_tp_cd = 20000

Debería poder ponerlos en la cláusula ''on'' de la unión en su lugar, de modo que solo se devuelvan las filas relevantes de la derecha.

select a.refnum, b.refnum, c.refnum from myTable a left outer join myTable b on (a.contid = b.contid and b.id_tp_cd = 10000) left outer join myTable c on (a.contid = c.contid and c.id_tp_cd = 20000) where a.id_tp_cd = 90000