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