Actualización de una tabla de base de datos excluyendo NULL
-
19-08-2019 - |
Pregunta
Tengo dos tablas con las mismas columnas
tbl_source (ID, Title)
tbl_dest (ID, Title)
Quiero actualizar los títulos tbl_dest de tbl_source donde coinciden los identificadores en dest y source. Sin embargo, no quiero actualizar el título de destino si el título de origen es nulo (o en blanco).
Tengo esto:
UPDATE tbl_dest
SET tbl_dest.Title =
(SELECT title
FROM tbl_source
WHERE tbl_dest.id = tbl_source.ID and tbl_source.title is not null)
Pero sigue insertando los valores nulos.
¿Cómo construiría tal consulta?
Estoy usando SQL Server 2005.
Gracias.
Solución
Use una unión interna ...
Update tbl_dest
Set tbl_dest.Title = tbl_source.Title
From tbl_dest inner join tbl_source on tbl_dest.ID = tbl_source.ID
Where tbl_source.Title is not null and tbl_source.Title <> ''
Otros consejos
Establece el valor en nulo porque la subconsulta devuelve nulo y no está filtrando registros en su cláusula de actualización.
Pruebe algo como esto en su lugar:
UPDATE tbl_dest
SET tbl_dest.Title =
(SELECT title
FROM tbl_source
WHERE tbl_source.id = tbl_dest.id)
WHERE EXISTS
(SELECT 1
FROM tbl_source
WHERE tbl_source.id = tbl_dest.id
AND tbl_source.title IS NOT NULL)
Esto se debe a que la consulta externa está actualizando cada registro (sin cláusula WHERE), por lo que cuando la consulta interna no encuentra un registro coincidente, se inserta NULL.
Agregue una cláusula WHERE a la consulta externa para no realizar una actualización en esos registros:
UPDATE tbl_dest
SET tbl_dest.Title =
(SELECT title
FROM tbl_source
WHERE tbl_dest.id = tbl_source.ID and tbl_source.title is not null)
WHERE EXISTS
(SELECT title
FROM tbl_source
WHERE tbl_dest.id = tbl_source.ID and tbl_source.title is not null)