更新除NULL之外的数据库表

时间:2009-01-16 20:19:28

标签: sql sql-server-2005 sql-update

我有两个具有相同列的表

tbl_source (ID, Title)

tbl_dest (ID, Title)

我想更新tbl_source中的tbl_dest标题,其中dest和source中的ID匹配。但是,如果源标题为空(或空白),我不想更新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)

但是它一直在插入空值。

我如何构建这样的查询?

我正在使用SQL Server 2005。

感谢。

3 个答案:

答案 0 :(得分:5)

使用内部联接...

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 <> ''

答案 1 :(得分:0)

它将值设置为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)

答案 2 :(得分:0)

那是因为外部查询正在更新每条记录(没有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)