seleccione - ACTUALIZACIÓN de SQL en la misma tabla con DONDE

CorePress2024-01-24  12

Tengo la siguiente tabla y quiero llenar los valores vacíos de la columna de nombre con el mismo valor del nombre donde id_lang=2. ¿Alguna idea de cuál debería ser la consulta SQL?

id_producto id_idioma nombre 1 1 - 1 2 nombre1 2 1 - 2 2 nombre2 3 1 - 3 2 nombre3 4 1 - 4 2 nombre4

2

Por favor, muestra lo que intentaste hasta ahora. Y etiquete su DBMS.

Astentx

27 de marzo de 2021 a las 8:04

¿Qué base de datos estás usando?

- Tim Biegeleisen

29 de marzo de 2021 a las 5:17



------------------------------------

Un enfoque general que debería funcionar utiliza una subconsulta correlacionada:

UPDATE yourTable t1
SET name = (SELECT name FROM yourTable t2
            WHERE t2.id_product = t1.id_product AND t2.id_lang = 2)
WHERE
    name IS NULL;

1

Aunque parece que es el enfoque correcto, aparece un error de SQL y aún así no puedo encontrar la sintaxis correcta. #1093 - No se puede especificar la tabla de destino 't1' para actualización en la cláusula FROM

-airjohn24

29 de marzo de 2021 a las 5:14



------------------------------------

En una consulta, simplemente puede usar la función de ventana:

select t.*,
       coalesce(name,
                max(case when id_lang = 2 then name end) over (partition by id_product)
               ) as imputed_name
from t;

Nota: Esto supone que - realmente significa NULL. Si es una cadena, lo anterior se puede modificar para usar CASE.

También puedes hacer esto fácilmente en una actualización, si deseas cambiar los datos de la tabla. sin embargo, elLa mejor manera de hacerlo depende de la base de datos.



------------------------------------

Puede utilizar una subconsulta: ACTUALIZAR tabla SET nombre = (SELECCIONAR nombre DISTINTO DE la tabla DONDE id_lang = 2)

Respondido

27 de marzo de 2021 a las 8:06

monterico

monterico

370

1

1 insignia de oro

4

4 insignias de plata

13

13 insignias de bronce

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare