Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Ayuda con Subconsulta

Estas en el tema de Ayuda con Subconsulta en el foro de Oracle en Foros del Web. Hola amigos del foro, espero me puedan ayudar les cuento lo que quiero hacer y no he podido, tengo la siguiente tabla... NUM_VENTA / FECHA_CUMPLI ...
  #1 (permalink)  
Antiguo 19/11/2008, 15:26
 
Fecha de Ingreso: enero-2005
Mensajes: 103
Antigüedad: 19 años, 3 meses
Puntos: 0
Ayuda con Subconsulta

Hola amigos del foro, espero me puedan ayudar les cuento lo que quiero hacer y no he podido, tengo la siguiente tabla...

NUM_VENTA / FECHA_CUMPLI
1 / NULL
2 / 19-11-2008
3 / 19-11-2008
3 / 19-11-2008
3 / NULL
4 / 20-11-2008
4 / 20-11-2008
5 / NULL
6 / 13-11-2008

y lo que quiero realizar es actualizar el registro que se encuentra NULL, esto debe suceder siempre y cuando exista el mismo NUM_VENTA con una fecha no NULL, en el ejemplo seria el NUM_VENTA=3 que posee 3 registros de los cuales 2 poseen una fecha que no es NULL
o sea el registro Nº5 debe quedar con la FECHA_CUMPLI=19/11/2008.

Espero no haber sido muy enredado y que me puedan ayudar...

Un abrazo, saludos
  #2 (permalink)  
Antiguo 19/11/2008, 16:10
 
Fecha de Ingreso: marzo-2008
Ubicación: Euskadi
Mensajes: 64
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Ayuda con Subconsulta

Hola,

doy por hecho, visto el ejemplo, que si hay más de un registro para un mismo NUM_VENTA entonces la FECHA_CUMPLI es siempre igual. Entonces la update sería algo así:

Código:
UPDATE tabla t1 SET t1.FECHA_CUMPLI = 
(SELECT t2.FECHA_CUMPLI FROM tabla t2 WHERE t1.NUM_VENTA = t2.NUM_VENTA AND t2.FECHA_CUMPLI IS NOT NULL AND ROWNUM = 1)
WHERE t1.FECHA_CUMPLI IS NULL
AND EXISTS(SELECT 1 FROM tabla t3 WHERE t1.NUM_VENTA = t3.NUM_VENTA AND t3.FECHA_CUMPLI IS NOT NULL);
El último filtro AND EXISTS... no sería necesario en este caso concreto pero es muy recomendable ponerlo siempre para que solamente actualice los registros que tiene que actualizar.

Un saludo.
  #3 (permalink)  
Antiguo 20/11/2008, 07:49
 
Fecha de Ingreso: enero-2005
Mensajes: 103
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: Ayuda con Subconsulta

Muchas Gracias MutenRo por responder pero sabes que aun me sigue sin funcionar, te muestro otro ejemplo:

TABLA 1
NUM_VENTA / FECHA_CUMPLI
1 / NULL
2 / 19-11-2008
3 / 19-11-2008
3 / 19-11-2008
3 / NULL
4 / 20-11-2008
4 / NULL
5 / NULL
6 / 13-11-2008

TABLA2
NUM_VENTA / ESTADO
9 / NULL
3 / AAA
5 / BBB
4 / AAA
10 / AAA

Al hacer join entre las 2 tablas tengo lo siguiente:

select a.num_venta, a.fecha_cumpli, b.estado
from TABLA1 a, TABLA2 b
where a.num_venta = b.num_venta

NUM_VENTA / FECHA_CUMPLI / ESTADO
3 / 19-11-2008 / AAA
3 / NULL / AAA
3 / 19-11-2008 / AAA
4 / NULL / AAA
4 / 20-11-2008 / AAA
5 / NULL / BBB

Lo que necesito es dejar el Registro Nº2 con FECHA_CUMPLI= 19-11-2008 y el Registro Nº4 con FECHA_CUMPLI= 20-11-2008, pero no lo logro realizar :(

Desde ya muchas gracias por tu tiempo
Salu2.
  #4 (permalink)  
Antiguo 20/11/2008, 08:52
 
Fecha de Ingreso: marzo-2008
Ubicación: Euskadi
Mensajes: 64
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Ayuda con Subconsulta

Hola rfgb1976,

no veo que el problema cambie con la nueva tabla.

¿Has ejecutado la update que te di sobre la TABLA1?
¿Cómo quedan los datos después de la update?
¿En qué se diferencian de lo que esperabas obtener?

Un saludo.
  #5 (permalink)  
Antiguo 20/11/2008, 09:05
 
Fecha de Ingreso: enero-2005
Mensajes: 103
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: Ayuda con Subconsulta

Hola...!!! MutenRo, te cuento que ejecute esto:

UPDATE TABLA1 t1
SET t1.FECHA_CUMPLI =
(SELECT t1.FECHA_CUMPLI
FROM TABLA1 t1, TABLA2 t2
WHERE t1.NUM_VENTA = t2.NUM_VENTA AND
t1.FECHA_CUMPLI IS NOT NULL AND
ROWNUM = 1)
WHERE t1.FECHA_CUMPLI IS NULL
AND EXISTS(SELECT 1 FROM TABLA1 t1, TABLA2 t2 WHERE t1.NUM_VENTA = t2.NUM_VENTA AND t1.FECHA_CUMPLI IS NOT NULL)

Se ejecuta bien el codigo pero dice: 0 rows Updated,

Salu2.
  #6 (permalink)  
Antiguo 20/11/2008, 09:30
 
Fecha de Ingreso: marzo-2008
Ubicación: Euskadi
Mensajes: 64
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Ayuda con Subconsulta

Hola rfgb1976,

no has hecho la update como yo te he dicho, pones FROM TABLA1 t1, TABLA2 t2 donde yo solamente había puesto FROM tabla t2 y FROM tabla t3.

Copia mi sentencia sustituyendo 'tabla' por 'TABLA1' y dejando todo lo demás como estaba.

Ya me constarás.

Un saludo.
  #7 (permalink)  
Antiguo 20/11/2008, 09:50
 
Fecha de Ingreso: enero-2005
Mensajes: 103
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: Ayuda con Subconsulta

MutenRo, mira ejecute exactamente como me dijistes:

UPDATE TABLA1 t1
SET t1.FECHA_CUMPLI =
(SELECT t2.FECHA_CUMPLI
FROM TABLA1 t2
WHERE t1.NUM_VENTA = t2.NUM_VENTA AND
t2.FECHA_CUMPLI IS NOT NULL
AND ROWNUM = 1)
WHERE t1.FECHA_CUMPLI IS NULL
AND EXISTS(SELECT 1 FROM TABLA1 t3 WHERE t1.NUM_VENTA = t3.NUM_VENTA AND t3.FECHA_CUMPLI IS NOT NULL)

el resultado es el mismo: 0 rows Updated
  #8 (permalink)  
Antiguo 20/11/2008, 10:29
 
Fecha de Ingreso: marzo-2008
Ubicación: Euskadi
Mensajes: 64
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Ayuda con Subconsulta

ay.... al final me has obligado a crear una tabla para probarlo y me ha funcionado bien, por lo tanto ya solamente queda que nos pases el script de creación de la tabla y unas pocas inserts para poder reproducirlo con unos datos.

¿te animas?

Un saludo.
  #9 (permalink)  
Antiguo 20/11/2008, 13:16
 
Fecha de Ingreso: enero-2005
Mensajes: 103
Antigüedad: 19 años, 3 meses
Puntos: 0
De acuerdo Respuesta: Ayuda con Subconsulta

Te pido un millon de disculpas, esta excelente el query que me madastes , el problema que tenia era de permisos... y ya lo solucione

Nuevamente muchas gracias por tu tiempo y buena disposicion a ayudarme
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:12.