SQL - ¿Alguien sabe por que nos da un error una sentencia UPDATE con INNER JOIN?

 
Vista:

¿Alguien sabe por que nos da un error una sentencia UPDATE con INNER JOIN?

Publicado por Sergio (2 intervenciones) el 26/09/2020 19:29:21
Hola a todos:

Tenemos un problema con las descripciones de los productos en un sistema de Prestashop. El caso es que tenemos que conseguir copiar los campos description y description_short en todos los registros cuyo campo id_lang sea distinto a 1, tomándolo de los mismos (description y description_short) en los registros cuyo campo id_lang sí sea 1 (todo en la misma tabla).

Hemos creado una sentencia que en un principio, probada con un SELECT, sí que funciona, pero que cuando la probamos con UPDATE, nos da un error, y no sabemos donde estamos metiendo la pata. La sentencia es:

1
2
3
4
5
6
UPDATE tabla SET tabla.description = tabla2.description, tabla.description_short = tabla2.description_short
 FROM 'ps_product_lang' tabla
INNER JOIN 'ps_product_lang' tabla2
ON tabla.id_product = tabla2.id_product
AND tabla2.id_lang = '1'
AND tabla.id_lang <> tabla2.id_lang;

El error que nos da es #1064 - Algo está equivocado en su sintax cerca 'FROM 'ps_product_lang' tabla
INNER JOIN 'ps_product_lang' tabla2
ON tabla...' en la linea 2

La línea 2 es "FROM 'ps_product_lang' tabla" .... pero no sabemos donde nos equivocamos. ¿Alguien puede ayudarnos? Seguro que es una tontería nuestra, pero ya no controlamos.

Lo olvidávamos: Trabajamos bajo MySQL...

Gracias y un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Francisco
Val: 150
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

¿Alguien sabe por que nos da un error una sentencia UPDATE con INNER JOIN?

Publicado por Francisco (60 intervenciones) el 27/09/2020 17:23:46
Hola

Cual version de MySQL?

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Alguien sabe por que nos da un error una sentencia UPDATE con INNER JOIN?

Publicado por Rafael Yzarra (1 intervención) el 27/09/2020 19:19:58
Buenos dias.
Al realizar el NonQuery [UPDATE], debe referirse unica y exclusivamente a una sola tabla, no colocar la misma tabla con un JOIN.
Otra observacion: Al colocar un JOIN, debe de hacerse es con LEFT... o con LEFT / RIGHT / INNER [OUTER JOIN] y no como erroneamente se hizo: con INNER...
...
Otra opcion, es utilizar dos consultas UPDATE para modificar la tabla secuencialmente...
...
Espero les sea de utilidad lo dicho anteriormente... (Y)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Alguien sabe por que nos da un error una sentencia UPDATE con INNER JOIN?

Publicado por Sergio (2 intervenciones) el 28/09/2020 08:12:47
Estimado Rafael:

Gracias por la respuesta, pero no es así. De echo, hemos dado con la solución después de mucho probar. Comentamos aquí la solución. Con esta sentencia, todos los que tengan problemas con las descripciones cortas y largas en los productos de Prestashop en los idiomas que no sean el principal (cualquier versión, incluida la 1.7.6.2), igualarán las descripciones de todos los idiomas a la del idioma principal. Espero que les sirva:

1
UPDATE ps_product_lang TABLA INNER JOIN ps_product_lang TABLA2 ON TABLA.id_product = TABLA2.id_product AND TABLA.id_lang <> 1 AND TABLA2.id_lang = 1 SET TABLA.description = TABLA2.description, TABLA.description_short = TABLA2.description_short

Funciona genial. A nosotros nos ha solucionado el tema. Gracias a todos por la colaboración.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Alguien sabe por que nos da un error una sentencia UPDATE con INNER JOIN?

Publicado por Alex Castañeda (1 intervención) el 24/07/2021 04:38:06
Te agradezco la info ya que me sirvio tu solución, faltaron tomar en cuenta otros campos como los meta (titulo,descripcion,etc)
pongo ta cual la utilicé por si le sirve a alguien más.

Saludos.
Nota* Cambiar el numero 4 por el id del idioma desde el cual se van a copiar los datos.

UPDATE ps_product_lang TABLA INNER JOIN ps_product_lang TABLA2 ON TABLA.id_product = TABLA2.id_product AND TABLA.id_lang <> 4 AND TABLA2.id_lang = 4 SET TABLA.description = TABLA2.description, TABLA.description_short = TABLA2.description_short, TABLA.meta_description = TABLA2.meta_description, TABLA.meta_keywords = TABLA2.meta_keywords, TABLA.meta_title = TABLA2.meta_title, TABLA.name = TABLA2.nameUPDATE ps_product_lang TABLA INNER JOIN ps_product_lang TABLA2 ON TABLA.id_product = TABLA2.id_product AND TABLA.id_lang <> 4 AND TABLA2.id_lang = 4 SET TABLA.description = TABLA2.description, TABLA.description_short = TABLA2.description_short, TABLA.meta_description = TABLA2.meta_description, TABLA.meta_keywords = TABLA2.meta_keywords, TABLA.meta_title = TABLA2.meta_title, TABLA.name = TABLA2.name
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar