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

Update Entre tablas

Estas en el tema de Update Entre tablas en el foro de Oracle en Foros del Web. Necesito Actualizar el campo Cantidad de una tabla llamada Ingrediente, Con la Cantidad de una Tabla Llamada Receta Este es el MER que relaciona estas ...
  #1 (permalink)  
Antiguo 10/11/2012, 19:30
 
Fecha de Ingreso: noviembre-2012
Ubicación: Cali - Colombia
Mensajes: 46
Antigüedad: 12 años
Puntos: 0
Pregunta Update Entre tablas

Necesito Actualizar el campo Cantidad de una tabla llamada Ingrediente, Con la Cantidad de una Tabla Llamada Receta

Este es el MER que relaciona estas dos tablas


Me explico Mejor. El producto 100 Chuleta

Usa estos ingredientes:
Sal 5 gr
Carne 500 gr
Arroz 50 gr
Papa 35 gr

Estas Cantidades son las de la Tabla RECETA Por ejemplo para la
Sal.
CodigoProducto=100, CodigoIngrediente=1,Cantidad =5

Carne

CodigoProducto=100, CodigoIngrediente=2,Cantidad =500
(Y asi para el resto)

Esto es lo que se necesita la chuleta de estos ingredientes para preparar la Receta.
En el Stock (La tabla INGREDIENTE)
Tengo las Cantidades totales Así.

Sal 25000 gr
Carne 80000 gr
Arroz 50000 gr
Papa 30000 gr

Y cuando uso este código

UPDATE Ingrediente a
SET a.Cantidad = NVL(a.Cantidad -(SELECT b.Cantidad FROM Receta b WHERE b.CodigoIngrediente =a.CodigoIngrediente
AND b.CodigoProducto=100),0)

Me actualiza bien:

Me quedan Asi:
Sal 24995 gr
Carne 79500 gr
Arroz 49950 gr
Papa 29965 gr

Pero el resto de ingredientes que tengo que no son ni la SAL NI LA CARNE NI LA PAPA NI EL ARROZ, El resto de ingredientes que no tienen nada que ver con chuleta el Producto 100, que son:

Tomate
Cebolla
ETC

Me los deja en 0.

Es decir en la Tabla Ingrediente (donde tengo almacenado las cantidades totales de los ingredientes) en el atributo Cantidad Tengo:

Tomate 25000
Cebolla 35000

Pero al usar el código que les digo que me sirve, Lo que hace es dejarme esos otros ingredientes en 0

Tomate 0
Cebolla 0

Como hago para corregir este Error

Luego esta sentencia la tengo que montar en java para actualizar desde java
  #2 (permalink)  
Antiguo 13/11/2012, 02:06
 
Fecha de Ingreso: noviembre-2012
Mensajes: 2
Antigüedad: 12 años
Puntos: 1
Respuesta: Update Entre tablas

Hola el problema, creo que se tiene que solucionar añadiendo el WHERE correspondiente el UPDATE, ya que si no lo añades estas actualizando todos los ingredientes. Quedaría así:
UPDATE Ingrediente a
SET a.Cantidad = NVL(a.Cantidad -(SELECT b.Cantidad FROM Receta b WHERE b.CodigoIngrediente =a.CodigoIngrediente
AND b.CodigoProducto=100),0)
WHERE a.CodigoIngrediente IN (SELECT c.CodigoIngrediente FROM Receta c WHERE c.CodigoProducto=100)
  #3 (permalink)  
Antiguo 13/11/2012, 09:28
 
Fecha de Ingreso: noviembre-2012
Ubicación: Cali - Colombia
Mensajes: 46
Antigüedad: 12 años
Puntos: 0
Respuesta: Update Entre tablas

Cita:
Iniciado por joeglo Ver Mensaje
Hola el problema, creo que se tiene que solucionar añadiendo el WHERE correspondiente el UPDATE, ya que si no lo añades estas actualizando todos los ingredientes. Quedaría así:
UPDATE Ingrediente a
SET a.Cantidad = NVL(a.Cantidad -(SELECT b.Cantidad FROM Receta b WHERE b.CodigoIngrediente =a.CodigoIngrediente
AND b.CodigoProducto=100),0)
WHERE a.CodigoIngrediente IN (SELECT c.CodigoIngrediente FROM Receta c WHERE c.CodigoProducto=100)

Muchas Gracias Man esta fue la solución. Te agradezco mucho
  #4 (permalink)  
Antiguo 13/11/2012, 09:38
Avatar de triqui  
Fecha de Ingreso: diciembre-2008
Ubicación: Zaragoza(España)
Mensajes: 624
Antigüedad: 15 años, 11 meses
Puntos: 31
Respuesta: Update Entre tablas

La solución de joeglo tienes sus peros, por ejemplo si la subconsulta

Código SQL:
Ver original
  1. SELECT c.CodigoIngrediente FROM Receta c WHERE c.CodigoProducto=100

tiene mas de 1000 registros, te dará un error, porque dentro del IN solo puede recibir menos de 1000.

Solo que lo supieras.

Utilizaria exists
__________________
La nueva red social de quinielas quiniela resultados
Cazaresultados Futbol base en directo
  #5 (permalink)  
Antiguo 19/11/2012, 09:12
 
Fecha de Ingreso: noviembre-2012
Ubicación: Cali - Colombia
Mensajes: 46
Antigüedad: 12 años
Puntos: 0
Respuesta: Update Entre tablas

Cita:
Iniciado por triqui Ver Mensaje
La solución de joeglo tienes sus peros, por ejemplo si la subconsulta

Código SQL:
Ver original
  1. SELECT c.CodigoIngrediente FROM Receta c WHERE c.CodigoProducto=100

tiene mas de 1000 registros, te dará un error, porque dentro del IN solo puede recibir menos de 1000.

Solo que lo supieras.

Utilizaria exists
Ok muchas gracias miraré las ventajas y desventajas de el IN y el EXIST, para cual se amolda mas a los requerimientos.

Sabes mas o menos cual es la principal diferencia? aparte de los 1000 registros?

Etiquetas: update, bases-de-datos
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 13:06.