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.

¿Fue útil?

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top