如果行存在于另一个 Table (SQL),如何更新

How to Update if a Row Exists on Another Table (SQL)

如果相关 table.

上存在具有匹配 iid 的行,我正在尝试更新 itemTable 上的列

itemMeta 是一种 NoSQL 风格 table,table 上的每个项目都有重复的 iid,而 itemTable 是关系型 table.

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)

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

这适用于大多数数据库,包括 SQL 服务器:

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) 上的索引。