Visual Basic Foro
Programación => Bases de Datos => Mensaje iniciado 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
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.
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.
-
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.
-
Hola, puedes hacer algo asi..
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...
-
no me funciona probe con este tambien me trae la resta pero no puedo hacer el update
SELECT articulos.stock-ventas.cantidad
FROM articulos, ventas
WHERE ventas.codarticulo=1 AND ventas.nfactura=1 AND articulos.codigo=1
-
Que error te da? Por que a mi si me funciona...!
-
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
-
Deberias tener solo una linea de codigo y no 2. Alli te indica que tienes un error en la linea 2. Verifica eso.
UPDATE articulos SET articulos.stock = articulos.stock - ventas.cantidad FROM articulos where articulos.codigo = ventas.codarticulo and ventas.nfactura=1 AND ventas.codarticulo=1
-
Deberias tener solo una linea de codigo y no 2. Alli te indica que tienes un error en la linea 2. Verifica eso.
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.
-
Ok, eso me funcionó en SQL Server... Veamos como lo armamos para MySQL...!
Prueba esto...!
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)
-
Error Code : 1093
You can't specify target table 'articulos' for update in FROM clause
-
Asi tiene que funcionar pero me da este error
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
-
Revisalo asi
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..!
-
Revisalo asi
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
-
Aca esta solucionado dejo por si alguien necesita.
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;
-
Aca esta solucionado dejo por si alguien necesita.
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
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...!