Actualizando varias tablas

SQL, mySQL, postgreSQL y otros motores
Responder
JavierC
Novato
Mensajes: 24
Registrado: Vie Sep 07, 2012 11:15 pm
Contactar:

Actualizando varias tablas

Mensaje por JavierC » Jue Ago 01, 2013 2:26 pm

Buen dia, mi consulta surge ya que como comente anteriormente , hace varios años que estoy con clarion, pero muy poco tiempo que estoy intentando enlazarlo con SQL.
Debido a esto, mi penzamiento para resolver los problemas es muy clarionero(TPS), es decir recorriendo tablas con loops...

Presentando el panorama: Tengo las sig. tablas en SQL

--Productos--
IDPro
CodPro
DescrPro
PrecioPro (suma de los renglones de ProdMat)

--Materiales--
IDMat
CodMat
DescrMat
IDCat
PrecioMat

--Categorias--
IDCat
DescrCat

--ProdMat--
IDPro
Renglon
IDMat
Cantidad
Precio
TotalRenglon (es igual a Cantidad * Precio)

(todos los archivos tienen sus indices y relaciones)

(ProdMat seria los materiales que forman un Producto)

Consultas (como serian las sentencias sql para dicha actualización)
1) Actualizar el precio de un material, teniendo en cuenta que se deben actualizar todos los registros que tengan este material en ProdMat, y que a la vez se actualice el precio del Producto.
2) Deseo actualizar en un % los valores de los Materiales que pertenecen a una determinada Categorias, teniendo en cuenta que no solo se debe actualizar PrecioMat en Materiales, sino tambien Precio y TotalRenglon en ProdMat y PrecioPro en Productos.

Espero que se alla comprendido que es lo que deseo realizar.
Se puede realizar esto en una sola consulta SQL o tengo que realizar loops como en TPS?
Gracias.
Saludos.


Avatar de Usuario
Mauricio
Desarrollador de Clarion
Mensajes: 1125
Registrado: Dom Feb 06, 2011 9:34 am
Ubicación: España
Contactar:

Re: Actualizando varias tablas

Mensaje por Mauricio » Vie Ago 02, 2013 5:16 pm

Por qué el precio del producto está en Productos y en ProdMat? No entendí esa parte.
Y por qué en tu diseño tenés TotalRenglon? Eso no está muy normalizado.
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog

JavierC
Novato
Mensajes: 24
Registrado: Vie Sep 07, 2012 11:15 pm
Contactar:

Re: Actualizando varias tablas

Mensaje por JavierC » Vie Ago 02, 2013 7:07 pm

Hola Mauricio.
El precio decidi ponerlo en ambos archivos por si en algun momento deciden no tomar el precio que figura en Materiales para un ProdMat determinado. Pero se podria sacar el precio del archivo ProdMat.
Con respecto a TotalRenglon para ahorrar un calculo ProdMat.Cantidad * ProdMat.Precio. Pero podria obviarse tambien.
Aveces repetir un campo en algun archivo te ayuda para no tener que acceder a otras tablas, y obtener el resultado de manera mas practica, aunque para la actualizacion se complica.
Replanteando, me gustaria saber como se resolveria con esta mueva estructura.
--ProdMat--
IDPro
Renglon
IDMat
Cantidad

El Problema se me plantea para recalcular el Producto.PrecioPro.

Avatar de Usuario
Mauricio
Desarrollador de Clarion
Mensajes: 1125
Registrado: Dom Feb 06, 2011 9:34 am
Ubicación: España
Contactar:

Re: Actualizando varias tablas

Mensaje por Mauricio » Sab Ago 03, 2013 4:02 pm

Javier, no me olvidé, estoy tratando de armar la estructura de tablas en una base de datos para enviarte la respuesta correcta.
Apenas la tenga la publico.
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog

JavierC
Novato
Mensajes: 24
Registrado: Vie Sep 07, 2012 11:15 pm
Contactar:

Re: Actualizando varias tablas

Mensaje por JavierC » Lun Ago 05, 2013 12:18 pm

Muchas gracias Mauricio. Espero tu respuesta.
Saludos.

Avatar de Usuario
Mauricio
Desarrollador de Clarion
Mensajes: 1125
Registrado: Dom Feb 06, 2011 9:34 am
Ubicación: España
Contactar:

Re: Actualizando varias tablas

Mensaje por Mauricio » Lun Ago 05, 2013 12:54 pm

Solo para estar seguro que entendí las relaciones, está esto bien?
http://screencast.com/t/2RZXXymVkN1
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog

Avatar de Usuario
Mauricio
Desarrollador de Clarion
Mensajes: 1125
Registrado: Dom Feb 06, 2011 9:34 am
Ubicación: España
Contactar:

Re: Actualizando varias tablas

Mensaje por Mauricio » Lun Ago 05, 2013 1:22 pm

Veamos, si no entendí mal las relaciones, esto es lo que tenés que hacer.

1) Actualizar el precio de un material

Código: Seleccionar todo

UPDATE Materiales 
SET PrecioMat = 20
WHERE CodMat = 1
En este caso actualizamos el precio del material cuyo CodMat = 1

Luego, actualizo los ProdMat que utilizan ese material (no solo el precio sino también el TotalRenglon)

Código: Seleccionar todo

UPDATE ProdMat
SET Precio = MAT.PrecioMat, 
TotalRenglon = Cantidad * MAT.PrecioMat
FROM ProdMat PM
INNER JOIN Materiales MAT ON PM.IdMat = Mat.IdMat
Y por último, actualizo el precio del producto.

Código: Seleccionar todo

UPDATE Productos
SET PrecPro = (SELECT SUM(TotalRenglon) FROM ProdMat PM WHERE PM.IdPro = PRO.IdPro)
FROM Productos PRO
Obviamente no vas a poder actualizar todo en un solo query sino que vas a necesitar 3 pero al menos no vas a tener que hacer ningún loop.
La actualización del precio en función de la categoría es similar.

Código: Seleccionar todo

UPDATE Materiales 
SET PrecioMat = PrecioMat * 1,2
WHERE IdCat = (categoría buscada)
Un detalle. En la primera parte, en los queries 2 y 3, estás actualizando toda la tabla. Lo lógico sería actualizar solo los registros cuyo código corresponde al del material actualizado pero para eso solo tenés que agregar un WHERE.
Si no te quedó claro, avisá.
Saludos.
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog

JavierC
Novato
Mensajes: 24
Registrado: Vie Sep 07, 2012 11:15 pm
Contactar:

Re: Actualizando varias tablas

Mensaje por JavierC » Lun Ago 05, 2013 2:01 pm

Agradezco mucho tu ayuda Mauricio, es exactamente lo que necesitaba saber. Gracias por tu interes en darnos una mano, y hacer mucho mas simple una implementacion sobre un motor como sql. Intentaré cambiar el pensamento TPSero que hace años tengo incorporado.
Nuevamente gracias.
Saludos.

Avatar de Usuario
Mauricio
Desarrollador de Clarion
Mensajes: 1125
Registrado: Dom Feb 06, 2011 9:34 am
Ubicación: España
Contactar:

Re: Actualizando varias tablas

Mensaje por Mauricio » Lun Ago 05, 2013 4:00 pm

De nada.
Dijiste algo importante, cambiar el pensamiento TPSero, es lo primero que tenés que hacer cuando trabajás con SQL. Pero te aseguro que una vez que le encontrás la mano no querés volver más a TPS.
Cualquier duda, seguí preguntando.
Saludos.
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog


Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 7 invitados