SQL如何提取C、D列值匹配且E列值相同的行并新增公共值列
SQL实现多条件行匹配及公共值提取
实现逻辑
- 采用同表自连接匹配满足规则的两行数据
- 核心匹配规则:左表C列值 = 右表D列值,且两张关联行的E列值完全相等
- 新增F列存储C、D列的公共匹配值
- 可根据需求选择返回配对行或去重后的符合条件行
完整实现代码
方案1:返回配对的两行完整数据(含公共匹配列F)
SELECT t1.*, t1.C AS F -- 此处t1.C与关联的t2.D值完全相等 FROM 你的表名 t1 INNER JOIN 你的表名 t2 ON t1.C = t2.D AND t1.E = t2.E -- 避免行与自身匹配,若表有唯一主键建议替换为 t1.主键 <> t2.主键,准确率更高 AND t1.A <> t2.A AND t1.B <> t2.B UNION ALL -- 关联匹配到的第二行数据 SELECT t2.*, t2.D AS F FROM 你的表名 t1 INNER JOIN 你的表名 t2 ON t1.C = t2.D AND t1.E = t2.E AND t1.A <> t2.A AND t1.B <> t2.B;
方案2:返回去重后的符合条件行(无重复数据)
如果不需要展示配对关系,仅需要提取所有满足规则的不重复行,可使用EXISTS简化写法:
SELECT *, (SELECT C FROM 你的表名 t2 WHERE t2.D = t1.C AND t2.E = t1.E LIMIT 1) AS F FROM 你的表名 t1 WHERE EXISTS ( SELECT 1 FROM 你的表名 t2 WHERE (t1.C = t2.D OR t1.D = t2.C) AND t1.E = t2.E AND t1.A <> t2.A AND t1.B <> t2.B );
验证说明
使用你提供的示例数据测试,上述代码会返回E列为$128的两行数据,新增F列值均为ABC,完全符合预期输出要求。
内容的提问来源于stack exchange,提问作者Ame
相关产品推荐
相关产品推荐

