Sql 更新不包含空值的DB表

Sql 更新不包含空值的DB表,sql,sql-server-2005,sql-update,Sql,Sql Server 2005,Sql Update,我有两个列相同的表 tbl_source (ID, Title) tbl_dest (ID, Title) 我想从tbl_源更新tbl_dest标题,其中dest和source中的ID匹配。但是,如果源标题为null(或空白),我不想更新dest标题 我有这个: UPDATE tbl_dest SET tbl_dest.Title = (SELECT title FROM tbl_source

我有两个列相同的表

tbl_source (ID, Title)

tbl_dest (ID, Title)
我想从tbl_源更新tbl_dest标题,其中dest和source中的ID匹配。但是,如果源标题为null(或空白),我不想更新dest标题

我有这个:

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)
但它不断插入空值

我将如何构造这样一个查询

我正在使用SQLServer2005

谢谢。

使用内部联接

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 <> ''
更新tbl\u dest
设置tbl_dest.Title=tbl_source.Title
从tbl_dest内部连接tbl_dest.ID=tbl_source.ID上的tbl_source
其中tbl_source.Title不为null且tbl_source.Title为“”
使用内部联接

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 <> ''
更新tbl\u dest
设置tbl_dest.Title=tbl_source.Title
从tbl_dest内部连接tbl_dest.ID=tbl_source.ID上的tbl_source
其中tbl_source.Title不为null且tbl_source.Title为“”

它将该值设置为null,因为子查询返回null,并且您没有在update子句中过滤记录

请尝试以下方法:

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)

它将该值设置为null,因为子查询返回null,并且您没有在update子句中筛选记录

请尝试以下方法:

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)

这是因为外部查询正在更新每个记录(no WHERE子句),所以当内部查询没有找到匹配的记录时,将插入NULL

将WHERE子句添加到外部查询以不更新这些记录:

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)

这是因为外部查询正在更新每个记录(no WHERE子句),所以当内部查询没有找到匹配的记录时,将插入NULL

将WHERE子句添加到外部查询以不更新这些记录:

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)