基于关联列更新SQL表Attachment字段:特定条件设为1
实现指定条件的SQL更新操作
需求说明
更新目标表,当记录满足以下两个条件时,将Attachment列设置为1:
- 记录的
TypeID= 1 - 该记录的
InvoiceNumber存在对应的TypeID= 3的关联记录
推荐SQL语句(无临时表,适合ETL流程)
使用EXISTS子查询的写法性能更优,适配大数据量场景:
UPDATE YourTableName SET Attachment = 1 WHERE TypeID = 1 AND EXISTS ( SELECT 1 FROM YourTableName AS t2 WHERE t2.InvoiceNumber = YourTableName.InvoiceNumber AND t2.TypeID = 3 );
备选写法(使用IN子查询)
如果更习惯IN语法,也可以采用以下语句:
UPDATE YourTableName SET Attachment = 1 WHERE TypeID = 1 AND InvoiceNumber IN ( SELECT InvoiceNumber FROM YourTableName WHERE TypeID = 3 );
当前表状态
| TypeID | InvoiceNumber | Attachment |
|---|---|---|
| 3 | I78671666 | NULL |
| 1 | I78671666 | NULL |
| 3 | I78671759 | NULL |
| 1 | I78671759 | NULL |
| 1 | I78671762 | NULL |
| 1 | I78671903 | NULL |
| 3 | I78672198 | NULL |
| 1 | I78672198 | NULL |
期望结果
| TypeID | InvoiceNumber | Attachment |
|---|---|---|
| 3 | I78671666 | NULL |
| 1 | I78671666 | 1 |
| 3 | I78671759 | NULL |
| 1 | I78671759 | 1 |
| 1 | I78671762 | NULL |
| 1 | I78671903 | NULL |
| 3 | I78672198 | NULL |
| 1 | I78672198 | 1 |
内容的提问来源于stack exchange,提问作者courty340
相关产品推荐
相关产品推荐

