Oracle - Seleccionar registros de un Select

   
Vista:

Seleccionar registros de un Select

Publicado por Josep (1 intervención) el 20/01/2010 18:45:52
Hola a todos, soy nuevo en el foro y en este tema, bueno la cosa es la siguiente.

Tengo dos tablas en una BD oracle, una de pedidos y otra de detalle del pedido, la cosa es que yo deseo que por medio de un query extraer la informacion del detalle de un pedido pero, si existe un producto x que sea de tipo 'nuevo' entonces la consulta uiunicamente me devolvera ese producto, pero si en el detalle de pedido no existe un producto 'nuevo' entonces me debera devolver todos los productos,,, me explico ??????

En decir, si el pedido tiene un producto nuevo solo me mostrara ese producto que esta en el detalle descartando todos los demas productos.

Se que los mas facil seria un SP pero no puedo generarlos por politicas de la empresa... de ante mano muchas gracias por su ayuda.....
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Seleccionar registros de un Select

Publicado por Leonardo Josue (44 intervenciones) el 22/01/2010 17:18:00
Sería bueno que pusieras algo más de información acerca de la estructura de las tablas, nombres de objetos etc, pero bueno, a ver si esto te puede servir.

Lo que se me ocurre hacer sería construir la consulta en dos parte: la primera donde traiga sólo aquellos detalles que sean de tipo nuevo, y la segunda traer todos los detalles de aquellos pedidos que no contengan ningún producto tipo 'nuevo' y pues hacer un union. a groso modo sería así

/*Para obtener solo aquellos detalles de productos tipo 'nuevos'*/

select t_pedidos.id_pedido, t_detalle_pedidos.id_detalle_pedido
from t_pedidos
inner join t_detalle_pedidos on t_detalle_pedidos.id_pedido = t_pedidos.id_pedido and t_detalle_pedido.tipo = 'nuevo'

union
/*Para obtener todos aquellos detalles de pedido cuyo detalle no contena ningun producto tipo 'nuevo'*/

select t_pedido.id_pedido, t_detalle_pedidos.id_detalle_pedido
from t_pedidos
inner join t_detalle_pedidos on t_detalle_pedidos.id_pedido = t_pedidos.id_pedido and
t_detalle_pedido.id_pedido not in (select distinct id_pedido from t_detalle_pedido where tipo = 'nuevo')
order by 5

Si notas en el segundo union hago una subconsulta para asegurarme que los detalles no contengan productos de tipo 'nuevo'.

Saludos y si encuentras alguna otra solución o te sirve este código lo comentas en el foro.

Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Seleccionar registros de un Select

Publicado por roberto (13 intervenciones) el 27/01/2010 20:08:33
Muy bueno tu codigo Leonardo modifique tu codigo casi igual, con una pequeña diferencia...

select t_pedidos.id_pedido, t_detalle_pedidos.id_detalle_pedido
from t_pedidos
inner join t_detalle_pedidos on t_detalle_pedidos.id_pedido = t_pedidos.id_pedido
and t_detalle_pedido.tipo = 'nuevo'

union
/*Para obtener todos aquellos detalles de pedido cuyo detalle no contena ningun producto tipo 'nuevo'*/

select t_pedido.id_pedido, t_detalle_pedidos.id_detalle_pedido
from t_pedidos
inner join t_detalle_pedidos on t_detalle_pedidos.id_pedido = t_pedidos.id_pedido
and 'S' NOT IN (select 'S' from t_detalle_pedido where tipo = 'nuevo')
order by 5

si el primer query se ejecuta el segundo no se ejecuta y viceversa...
saludos.-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar