题
我有相同的列的两个表
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)
不隶属于 StackOverflow