0

我有两个具有相同列的表

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。

谢谢。

4

3 回答 3

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 <> ''
于 2009-01-16T20:24:28.237 回答
0

它将值设置为 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)
于 2009-01-16T20:26:28.030 回答
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)
于 2009-01-16T20:26:48.793 回答