Visual Basic Foro

Programación => Bases de Datos => Mensaje iniciado por: E N T E R en Julio 19, 2011, 12:47:52 am

Título: UPDATE SELECT INNER JOIN
Publicado por: E N T E R en Julio 19, 2011, 12:47:52 am
Estoy queriendo hacer una actualización a una tabla de esta forma. Hacer una consulta en la tabla ventas de acuerdo al codigo del articulo y la factura y actualizar la tabla artículos con la resta. tengo esta query pero no me esta funcionando.

con esto me trae la resta de ventas - articulos

Código: [Seleccionar]
SELECT articulos.stock - ventas.cantidad AS Resta
FROM articulos INNER JOIN ventas ON articulos.codigo = ventas.codarticulo
WHERE ventas.nfactura=1 AND ventas.codarticulo=1

Se puede hacer un UPDATE de esta forma.

Código: [Seleccionar]
UPDATE articulos
SET stock=(SELECT articulos.stock - ventas.cantidad AS Resta
                  FROM articulos INNER JOIN ventas ON articulos.codigo = ventas.codarticulo
                  WHERE ventas.nfactura=1 AND ventas.codarticulo=1)

YAcosta: Disculpa la intromision, solo para ordenar un poco.
Título: Re:UPDATE SELECT INNER JOIN
Publicado por: YAcosta en Julio 19, 2011, 02:45:27 am
Creo que no. Es decir... no lo he probado pero:
1.- Ese Update actualizara a toda la tabla artículos, le faltaría un Where al Update.
2.- Para que funcione, el select debe darte un solo registro.
Título: Re:UPDATE SELECT INNER JOIN
Publicado por: ssccaann43 en Julio 19, 2011, 12:06:59 pm
Hola, puedes hacer algo asi..

Código: [Seleccionar]

UPDATE articulos SET articulos.stock = articulos.stock - ventas.cantidad
FROM articulos where articulos.codigo = ventas.codarticulo and ventas.nfactura=1 AND ventas.codarticulo=1


Saludos...

Título: Re:UPDATE SELECT INNER JOIN
Publicado por: E N T E R en Julio 19, 2011, 12:39:33 pm
no me funciona probe con este tambien me trae la resta pero no puedo hacer el update

Código: [Seleccionar]
SELECT articulos.stock-ventas.cantidad
FROM articulos, ventas
WHERE ventas.codarticulo=1 AND ventas.nfactura=1 AND articulos.codigo=1
Título: Re:UPDATE SELECT INNER JOIN
Publicado por: ssccaann43 en Julio 19, 2011, 12:40:11 pm
Que error te da? Por que a mi si me funciona...!
Título: Re:UPDATE SELECT INNER JOIN
Publicado por: E N T E R en Julio 19, 2011, 12:44:35 pm
Que error te da? Por que a mi si me funciona...!


Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM articulos where articulos.codigo = ventas.codarticulo and ventas.nfactura=1' at line 2
Título: Re:UPDATE SELECT INNER JOIN
Publicado por: ssccaann43 en Julio 19, 2011, 12:53:15 pm
Deberias tener solo una linea de codigo y no 2. Alli te indica que tienes un error en la linea 2. Verifica eso.

Código: [Seleccionar]
UPDATE articulos SET articulos.stock = articulos.stock - ventas.cantidad FROM articulos where articulos.codigo = ventas.codarticulo and ventas.nfactura=1 AND ventas.codarticulo=1
Título: Re:UPDATE SELECT INNER JOIN
Publicado por: E N T E R en Julio 19, 2011, 01:02:00 pm
Deberias tener solo una linea de codigo y no 2. Alli te indica que tienes un error en la linea 2. Verifica eso.

Código: [Seleccionar]
UPDATE articulos SET articulos.stock = articulos.stock - ventas.cantidad FROM articulos where articulos.codigo = ventas.codarticulo and ventas.nfactura=1 AND ventas.codarticulo=1

Me da el mismo error
Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM articulos where articulos.codigo = ventas.codarticulo and ventas.nfactura=1' at line 1

pero como sabe el de la tabla ventas por que no veo en ningún lugar que seleccionas esa tabla.
Título: Re:UPDATE SELECT INNER JOIN
Publicado por: ssccaann43 en Julio 19, 2011, 01:03:32 pm
Ok, eso me funcionó en SQL Server... Veamos como lo armamos para MySQL...!

Prueba esto...!
Código: [Seleccionar]

UPDATE articulos
SET articulos.stock= articulos.stock - (SELECT  ventas.cantidad AS Resta
                  FROM articulos INNER JOIN ventas ON articulos.codigo = ventas.codarticulo
                  WHERE ventas.nfactura=1 AND ventas.codarticulo=1)

Título: Re:UPDATE SELECT INNER JOIN
Publicado por: E N T E R en Julio 19, 2011, 01:13:04 pm
Error Code : 1093
You can't specify target table 'articulos' for update in FROM clause
Título: Re:UPDATE SELECT INNER JOIN
Publicado por: E N T E R en Julio 19, 2011, 01:17:13 pm
Asi tiene que funcionar pero me da este error

Código: [Seleccionar]
UPDATE articulos SET articulos.stock=(SELECT articulos.stock-ventas.cantidad FROM articulos INNER JOIN ventas ON articulos.codigo = ventas.codarticulo WHERE ventas.nfactura=1 AND ventas.codarticulo=1) WHERE articulos.codigo=1

Error Code : 1093
You can't specify target table 'articulos' for update in FROM clause
Título: Re:UPDATE SELECT INNER JOIN
Publicado por: ssccaann43 en Julio 19, 2011, 01:28:53 pm
Revisalo asi
Código: [Seleccionar]
UPDATE articulos SET articulos.stock = (SELECT  articulos.stock - ventas.cantidad AS Resta FROM articulos, ventas WHERE  articulos.codigo = ventas.codarticulo and ventas.nfactura=1 AND ventas.codarticulo=1)
El select alli debería devolverte un solo registro, no veo la razón por la cual no podría funcionar..!
Título: Re:UPDATE SELECT INNER JOIN
Publicado por: E N T E R en Julio 19, 2011, 01:37:30 pm
Revisalo asi
Código: [Seleccionar]
UPDATE articulos SET articulos.stock = (SELECT  articulos.stock - ventas.cantidad AS Resta FROM articulos, ventas WHERE  articulos.codigo = ventas.codarticulo and ventas.nfactura=1 AND ventas.codarticulo=1)
El select alli debería devolverte un solo registro, no veo la razón por la cual no podría funcionar..!

Me tira el mismo error amigo.


Error Code : 1093
You can't specify target table 'articulos' for update in FROM clause
Título: Re:UPDATE SELECT INNER JOIN
Publicado por: E N T E R en Julio 19, 2011, 02:04:50 pm
Aca esta solucionado dejo por si alguien necesita.

Código: [Seleccionar]
UPDATE articulos INNER JOIN ventas ON articulos.codigo = ventas.codarticulo
SET articulos.stock=(articulos.stock-ventas.cantidad)
WHERE ventas.nfactura = 1 AND ventas.codarticulo = 1;
Título: Re:UPDATE SELECT INNER JOIN
Publicado por: ssccaann43 en Julio 19, 2011, 03:01:11 pm
Aca esta solucionado dejo por si alguien necesita.

Código: [Seleccionar]
UPDATE articulos INNER JOIN ventas ON articulos.codigo = ventas.codarticulo
SET articulos.stock=(articulos.stock-ventas.cantidad)
WHERE ventas.nfactura = 1 AND ventas.codarticulo = 1;

Excelente, mi error y no lo habia visto sino hasta ahora es que no le coloque el INNER JOIN en el update

Código: [Seleccionar]
UPDATE articulos (Aqui y quitar el from) SET articulos.stock = articulos.stock - ventas.cantidad
FROM articulos where articulos.codigo = ventas.codarticulo and ventas.nfactura=1 AND ventas.codarticulo=1

:( que mal que no me haya fijado.. Disculpa...! Y bueno que bien que resolviste...!