求助:带双EXISTS子句的SQL UPDATE语句修正与字段置空
修正含双EXISTS子句的UPDATE SQL语句
我来帮你搞定这条UPDATE语句的逻辑修正,完全匹配你的需求:把trustpilot_links表中满足两个条件的记录的invite_after_enquiry字段设为NULL——一是这条记录的tracker_unique_id压根没出现在ab_split_tracker_unique_link表里,二是ab_split_tracker_unique_link表中对应的ab_split_id在ab_split表中的reference值正好是'review_invite_after_enquiry'。
先看一下你的表结构示例
trustpilot_links表
| trustpilot_link_id | invite_after_enquiry | tracker_unique_id |
|---|---|---|
| 1 | 1 | 123 |
| 2 | 0 | 1234 |
ab_split_tracker_unique_link表
| tracker_unique_id | ab_split_id |
|---|---|
| 1234 | 32 |
ab_split表
| ab_split_id | reference |
|---|---|
| 32 | review_invite_after_enquiry |
修正后的UPDATE语句
UPDATE trustpilot_links tpl SET invite_after_enquiry = NULL WHERE NOT EXISTS ( -- 筛选出tracker_unique_id从未出现在ab_split_tracker_unique_link的记录 SELECT 1 FROM ab_split_tracker_unique_link astul WHERE astul.tracker_unique_id = tpl.tracker_unique_id ) AND EXISTS ( -- 确认ab_split_tracker_unique_link中存在符合reference要求的关联记录 SELECT 1 FROM ab_split_tracker_unique_link astul INNER JOIN ab_split abs ON astul.ab_split_id = abs.ab_split_id WHERE abs.reference = 'review_invite_after_enquiry' );
逻辑解释
- 第一个
NOT EXISTS子句:逐个检查trustpilot_links里的每条记录,只保留那些tracker_unique_id在ab_split_tracker_unique_link表中完全找不到匹配的记录; - 第二个
EXISTS子句:确保ab_split_tracker_unique_link表中确实存在关联到ab_split表中reference为'review_invite_after_enquiry'的记录——只有当这个条件也满足时,才会执行字段置NULL的操作。
内容的提问来源于stack exchange,提问作者Sparkeroo
相关产品推荐
相关产品推荐

