基于匹配数与可选列匹配的SQL LEFT JOIN逻辑实现问询
解决大表LEFT JOIN的特殊匹配逻辑问题
我需要处理两张大表(150k行 × 300k行)的SQL LEFT JOIN场景,具体情况如下:
- 存在格式为
11002_13202的key字段,该字段本应唯一但偶尔会出现重复 - 另有附加列(例如
'AAA')可辅助保证匹配的唯一性,通过key+附加列的组合匹配能避免错误关联 - 需遵循特殊匹配规则:
- 当按key连接仅能得到1个匹配结果时,即使附加列不匹配也要完成连接
- 当匹配结果多于1个时,必须同时满足key和附加列都匹配
期望连接结果
| 表A key | 表B key | 附加字段A | 附加字段B |
|---|---|---|---|
| 11002_13202 | 11002_13202 | AAA | AAA |
| 11002_13202 | NULL | BBB | NULL |
| 92321_32322 | 92321_32322 | BBB | AAA |
| 2310_23123 | NULL | AAA | NULL |
| 2310_23123 | NULL | BBB | NULL |
| 2310_23123 | 2310_23123 | CCC | CCC |
| 23821_2322 | NULL | BBB | NULL |
| 23821_2322 | 23821_2322 | BBB | BBB |
表A样例数据
| 表A key | 附加字段A |
|---|---|
| 11002_13202 | AAA |
| 11002_13202 | BBB |
| 92321_32322 | BBB |
| 2310_23123 | AAA |
| 2310_23123 | BBB |
| 2310_23123 | CCC |
| 23821_2322 | AAA |
| 23821_2322 | BBB |
表B样例数据
| 表B key | 附加字段B |
|---|---|
| 11002_13202 | AAA |
| 92321_32322 | AAA |
| 2310_23123 | CCC |
| 23821_2322 | BBB |
内容的提问来源于stack exchange,提问作者Stijn
相关产品推荐
相关产品推荐

