基于条件判断的表连接:处理重复ID避免笛卡尔积
条件关联避免笛卡尔积解决方案
针对你的需求,可以通过在JOIN的关联条件中直接加入code_T与Name的匹配规则,精准关联目标行,避免重复ID导致的笛卡尔积。
实现SQL语句
SELECT a.ID, a.code, a.code_T, b.Desc FROM TableA a LEFT JOIN TableB b ON a.ID = b.Id AND ( (a.code_T = 290 AND b.Name = 'A') OR (a.code_T = 300 AND b.Name = 'B') -- 可选:如果code_T不是290/300时需要关联所有匹配ID的行,添加以下语句 -- OR a.code_T NOT IN (290, 300) );
逻辑说明
- 将匹配规则写入
ON子句而非WHERE,确保只有符合code_T对应Name的TableB行才会被关联,从根源避免笛卡尔积。 - 使用
LEFT JOIN保证TableA的所有行都能被返回;如果只需要返回能匹配到TableB的行,可替换为INNER JOIN。
执行结果(未添加可选条件时)
| ID | code | code_T | Desc |
|---|---|---|---|
| 1 | 100 | 100 | NULL |
| 2 | 101 | 290 | ABC |
| 3 | 102 | 300 | CDE |
内容的提问来源于stack exchange,提问作者kannan m
相关产品推荐
相关产品推荐

