Autor Tema: UPDATE SELECT INNER JOIN  (Leído 9592 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
UPDATE SELECT INNER JOIN
« 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.
« última modificación: Julio 19, 2011, 02:42:11 am por YAcosta »
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:UPDATE SELECT INNER JOIN
« Respuesta #1 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.
Me encuentras en YAcosta.com

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:UPDATE SELECT INNER JOIN
« Respuesta #2 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...

Miguel Núñez.

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:UPDATE SELECT INNER JOIN
« Respuesta #3 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
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:UPDATE SELECT INNER JOIN
« Respuesta #4 en: Julio 19, 2011, 12:40:11 pm »
Que error te da? Por que a mi si me funciona...!
Miguel Núñez.

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:UPDATE SELECT INNER JOIN
« Respuesta #5 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
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:UPDATE SELECT INNER JOIN
« Respuesta #6 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
Miguel Núñez.

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:UPDATE SELECT INNER JOIN
« Respuesta #7 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.
« última modificación: Julio 19, 2011, 01:03:49 pm por E N T E R »
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:UPDATE SELECT INNER JOIN
« Respuesta #8 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)

Miguel Núñez.

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:UPDATE SELECT INNER JOIN
« Respuesta #9 en: Julio 19, 2011, 01:13:04 pm »
Error Code : 1093
You can't specify target table 'articulos' for update in FROM clause
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:UPDATE SELECT INNER JOIN
« Respuesta #10 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
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:UPDATE SELECT INNER JOIN
« Respuesta #11 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..!
Miguel Núñez.

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:UPDATE SELECT INNER JOIN
« Respuesta #12 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
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:UPDATE SELECT INNER JOIN
« Respuesta #13 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;
« última modificación: Julio 19, 2011, 03:01:00 pm por ssccaann43 »
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:UPDATE SELECT INNER JOIN
« Respuesta #14 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...!
Miguel Núñez.