如何更新是否在另一张表上存在行(SQL)

时间:2019-05-28 15:16:55

标签: sql sql-server sql-update case exists

如果相关表上存在具有匹配的itemTable的行,我正在尝试更新iid上的列。

itemMeta是一个NoSQL样式表,该表上每个项目都有重复的iid,而itemTable是一个关系表。

update itemTable it
set hasAttributes = (select
  case when select count(1) from itemMeta where (im.iid = it.iid) 
  then 'Y' 
  else 'N' end)
from itemMeta im
where (im.iid = it.iid)

如果Y上存在与itemTable相匹配的行,如何在iid上将列设置为itemMeta

1 个答案:

答案 0 :(得分:4)

这将适用于大多数数据库,包括SQL Server:

update itemTable
    set hasAttributes = (case when exists (select 1
                                           from itemMeta im
                                           where im.iid = itemTable.iid
                                          ) 
                              then 'Y' else 'N'
                         end);

如果您只想将值更新为'Y'(如果该值存在)(如果存在则保留现有值),那么我建议:

update itemTable
    set hasAttributes = 'Y'
    where exists (select 1
                  from itemMeta im
                  where im.iid = itemTable.iid
                 );

这限制了要更新的行,因此应具有更好的性能。

而且,如果您关心性能,则希望在itemMeta(iid)上建立索引。