如何使用UPDATE语句更新列?求基于CIF更新FLAG列的SQL更新/合并查询
基于CIF字段更新FLAG列的SQL解决方案
问题场景

我尝试基于CIF字段更新FLAG列,但无法实现,恳请帮忙编写UPDATE/MERGE查询语句。

UPDATE语句实现
根据图表逻辑,推测需求为:同一CIF存在多条记录时,FLAG设为'Y';CIF唯一时,FLAG设为'N',以下是对应实现语句:
通用子查询写法(兼容多数数据库)
UPDATE your_table t_main SET FLAG = ( SELECT CASE WHEN COUNT(*) > 1 THEN 'Y' ELSE 'N' END FROM your_table t_sub WHERE t_sub.CIF = t_main.CIF );
窗口函数优化写法(支持窗口函数的数据库:Oracle、PostgreSQL、SQL Server等)
该写法性能更优,避免重复执行子查询:
UPDATE your_table SET FLAG = calc_flag FROM ( SELECT CIF, CASE WHEN COUNT(*) OVER (PARTITION BY CIF) > 1 THEN 'Y' ELSE 'N' END AS calc_flag FROM your_table ) t_calc WHERE your_table.CIF = t_calc.CIF;
MERGE语句实现(适用于Oracle、DB2等支持MERGE的数据库)
MERGE INTO your_table t_target USING ( SELECT CIF, CASE WHEN COUNT(*) OVER (PARTITION BY CIF) > 1 THEN 'Y' ELSE 'N' END AS target_flag FROM your_table ) t_source ON (t_target.CIF = t_source.CIF) WHEN MATCHED THEN UPDATE SET t_target.FLAG = t_source.target_flag;
注意:
- 将语句中的
your_table替换为你的实际表名- 若业务逻辑与推测不同,可直接修改
CASE语句中的判断条件和取值
内容的提问来源于stack exchange,提问作者Bala S
相关产品推荐
相关产品推荐

