我有两个具有相同列的表
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。
感谢。
答案 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)