如何在MS Excel中模拟类似SQL内连接的外键表更新操作?
在Excel中实现SQL内连接更新逻辑
原SQL Server逻辑是通过内连接匹配两张表的OrderId,将table2中shippingChoice=1对应的table1行的OrderCount和Cost设为0,对应的SQL语句如下:
UPDATE table1 SET OrderCount = 0, Cost = 0 FROM table1 INNER JOIN table2 ON table2.OrderId = table1.orderID WHERE table2.shippingChoice = 1
以下是在Excel中实现该逻辑的具体步骤:
方法一:辅助列标记+条件更新
- 提取table2中符合条件的OrderId
在table2中筛选出shippingChoice=1的所有行,复制这些行的OrderId到空白区域(比如Sheet3的A列),再通过数据>删除重复值得到唯一的OrderId列表。 - 在table1中标记匹配行
在table1新增辅助列(比如E列),输入公式判断当前行的orderID是否在上述唯一列表中:
(A2为table1中orderID所在单元格,返回1表示匹配成功,0表示未匹配)=COUNTIF(Sheet3!$A:$A, A2) - 批量更新目标列
对OrderCount列(假设为B列)输入公式:
对=IF(E2=1, 0, B2)Cost列(假设为C列)输入公式:
下拉公式覆盖所有行后,选中计算结果区域,右键复制,再右键选择粘贴值,替换原数据完成更新。=IF(E2=1, 0, C2)
方法二:高级筛选批量更新
- 生成table2的条件OrderId列表
同方法一,先得到table2中shippingChoice=1的唯一OrderId列表。 - 筛选table1中匹配的行
选中table1的数据区域,点击数据>高级,选择“将筛选结果复制到其他位置”,列表区域选table1全数据,条件区域设置为:在空白单元格输入orderID,下方输入=IN(Sheet3!$A:$A),确定后得到匹配的行。 - 批量设置值
在筛选后的OrderCount和Cost列直接输入0,按Ctrl+Enter批量填充,取消筛选即可完成更新。
注:VLOOKUP/INDEX MATCH多用于返回匹配的具体值,而此场景需要的是判断匹配存在性并批量更新固定值,因此上述方法更贴合需求。
内容的提问来源于stack exchange,提问作者Kevin McFadden
相关产品推荐
相关产品推荐

