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

Posted

技术标签:

【中文标题】如果行存在于另一个表中,如何更新 (SQL)【英文标题】:How to Update if a Row Exists on Another Table (SQL) 【发布时间】:2019-05-28 15:16:55 【问题描述】:

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

itemMeta 是 NoSQL 样式表,表上每个项目都有重复的 iids,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)

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

【问题讨论】:

用您正在使用的数据库标记您的问题。您的查询有什么问题?您想将值更新为什么? 使用 SQL Server 标记更新。 【参考方案1】:

这适用于大多数数据库,包括 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) 上建立索引。

【讨论】:

太棒了。谢谢!!

以上是关于如果行存在于另一个表中,如何更新 (SQL)的主要内容,如果未能解决你的问题,请参考以下文章

sql 示例:如果行存在,则如何更新行或如​​果行不存在则插入行

如果行不存在具有相同的值,如何在 Mysql 中插入行

SQL 查询 - 如果存在则更新,否则插入

如果行之间的差异超过 1 分钟,如何对数据进行分组

Python BigQuery - 如果行是新的并忽略重复的行,如何附加到表中

SQL Server 查询。用户存在于另一个表中但不存在用户的位置