我有相同的列的两个表

tbl_source (ID, Title)

tbl_dest (ID, Title)

我想从tbl_source更新tbl_dest标题其中在dest和源匹配的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。

感谢。

有帮助吗?

解决方案

使用一个内连接...

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子句筛选记录。

尝试是这样的,而不是:

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)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top