You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL技术问询:如何将unsubscribe_type为'Marketing and Reminder'的单条记录拆分为两条记录

拆分Unsubscribe类型记录的SQL解决方案

嘿,我来帮你搞定这个拆分记录的需求!其实你一开始想到的UNION ALL路子是完全正确的,可能只是细节没捋顺,我给你两种实用的方法,包你能用:

方法一:用UNION ALL拆分(直观易理解)

这种方法就是把符合条件的记录分别查询两次,每次替换成对应的类型,再合并插入到目标表。假设你的原表叫original_table,目标表叫target_table,代码如下:

INSERT INTO target_table (No, Name, Address, unsubscribe_type)
-- 生成Marketing类型的记录
SELECT No, Name, Address, 'Marketing' AS unsubscribe_type
FROM original_table
WHERE unsubscribe_type = 'Marketing and Reminder'
UNION ALL
-- 生成Reminder类型的记录
SELECT No, Name, Address, 'Reminder' AS unsubscribe_type
FROM original_table
WHERE unsubscribe_type = 'Marketing and Reminder';

注意点:

如果目标表的No是自增主键(就像你示例里的No从1变成2那样),那你不用在INSERT里指定No字段,让数据库自动生成就行,代码可以改成:

INSERT INTO target_table (Name, Address, unsubscribe_type)
SELECT Name, Address, 'Marketing'
FROM original_table
WHERE unsubscribe_type = 'Marketing and Reminder'
UNION ALL
SELECT Name, Address, 'Reminder'
FROM original_table
WHERE unsubscribe_type = 'Marketing and Reminder';

方法二:用CROSS JOIN + VALUES(更简洁高效)

如果以后你需要拆分更多类型,这种方法更省心,不用重复写WHERE条件:

INSERT INTO target_table (No, Name, Address, unsubscribe_type)
SELECT 
    ot.No, 
    ot.Name, 
    ot.Address, 
    split_types.type
FROM original_table ot
-- 这里列出需要拆分的所有类型
CROSS JOIN (
    VALUES ('Marketing'), ('Reminder')
) AS split_types(type)
WHERE ot.unsubscribe_type = 'Marketing and Reminder';

这个逻辑是把每条符合条件的记录,和我们定义的两个类型做交叉关联,自动生成两条记录,代码更精简,维护起来也方便。

内容的提问来源于stack exchange,提问作者Harvey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 23:47:38