English 中文(简体)
更新一个数据库表,排除 NULL 值。
原标题:
  • 时间:2009-01-16 20:19:27
  •  标签:

我有两张具有相同列的表格。

tbl_source (ID, Title)

tbl_dest (ID, Title)

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

我有这个:

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。

谢谢。 (xiè xiè.)

最佳回答

使用内连接...

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 <>   
问题回答

这是将值设置为null,因为子查询返回null,并且您没有在更新子句中过滤记录。

尝试换了一种方式,像这样:

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)

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




相关问题
热门标签