从子查询更新表

时间:2010-12-10 00:05:27

标签: sql sql-server normalization

在下面的语句中,我试图根据从子查询SELECT语句检索的数据来规范化表'回复'中的LocationID。基本上,Replies表中的LocationID不在MasterList中,我想用'1234'的位置替换那些出现。我认为下面的陈述可行,但事实并非如此。当我尝试运行它时,它会在2010年5月5日之后更新回复表中的所有LocationID。

UPDATE Replies
SET Replies.LocationID = '1234'
FROM (SELECT lml.LocationID FROM Replies sfs LEFT JOIN MasterList lml ON lml.LocationID=sfs.LocationID WHERE sfs.CreateDate >= '5/5/2010') AS rs
WHERE rs.LocationID is null

1 个答案:

答案 0 :(得分:2)

您可以使用not exists子句查找masterList上不存在的位置

update replies  
set locationid='1234'
where not exists (
select 1 from masterlist as ml
where 
   ml.locationid=replies.locationid
)
and CreateDate >= '5/5/2010'