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