SQL查询:查找不同行C、D列值匹配且E列值相同的对应数据
解决方案
你可以通过表自连接的方式实现跨行匹配需求,以下是不同使用场景下的SQL写法:
场景1:单独返回所有符合条件的行
如果需要把匹配上的两行都单独作为结果输出,可以用EXISTS子查询实现:
SELECT t.* FROM 你的实际表名 t WHERE EXISTS ( SELECT 1 FROM 你的实际表名 t2 WHERE -- 满足跨行C、D列匹配规则 (t.C = t2.D OR t.D = t2.C) -- 两行E列值完全相同 AND t.E = t2.E -- 避免匹配到同一行,无主键可替换为能唯一区分行的字段组合 AND t.主键列 != t2.主键列 );
场景2:返回配对行的关联信息
如果需要把匹配的两行信息放在同一条结果中展示,可以用自连接查询:
SELECT t1.A AS 匹配行1_A, t1.B AS 匹配行1_B, t2.A AS 匹配行2_A, t2.B AS 匹配行2_B, t1.E AS 共同E列值 FROM 你的实际表名 t1 INNER JOIN 你的实际表名 t2 ON t1.D = t2.C AND t1.E = t2.E -- 避免重复返回同一配对,如A匹配B和B匹配A仅返回一次 AND t1.主键列 < t2.主键列;
用你给出的示例数据测试场景2的查询,会直接返回teeth行和hand行的配对结果,完全符合你预期的匹配规则。如果只需要提取指定列,自行调整SELECT后的字段列表即可。
内容的提问来源于stack exchange,提问作者Ame
相关产品推荐
相关产品推荐

