拼接表字段后左连接SQL需求:筛选TableA独有的记录
左连接筛选仅存在于TableA的记录方案
没问题,我来帮你梳理这个查询的实现思路和完整语句:
首先,我们的核心目标是找出TableA中那些无法匹配到TableB任何拼接格式(Col1.Col2或Col1.Col2.Col3)的记录。左连接是最合适的方式,因为它会保留TableA的所有记录,同时匹配TableB的对应项,我们只需要筛选出匹配失败(TableB字段为NULL)的行即可。
完整SQL查询语句
SELECT A.Col1 FROM TableA AS A LEFT JOIN TableB AS B ON A.Col1 IN ( CONCAT(B.Col1, '.', B.Col2), CONCAT(B.Col1, '.', B.Col2, '.', B.Col3) ) WHERE B.Col1 IS NULL;
关键逻辑解释
- 连接条件设计:通过
IN子句让TableA的Col1与TableB字段拼接后的两种格式做匹配——既检查两段式的Col1.Col2,也检查三段式的Col1.Col2.Col3,覆盖TableA中不同格式的字段值。 - 筛选规则:左连接特性决定了,如果TableA的某条记录在TableB中没有任何匹配项,那么TableB对应的所有字段都会是
NULL。因此用WHERE B.Col1 IS NULL就能精准筛选出仅存在于TableA的记录。
结合你的数据验证结果
用你给出的测试数据跑这个查询,最终只会返回one.3:
one.1.1匹配TableB的one.1.1(三段拼接)two.2.2匹配TableB的two.2.2(三段拼接)three.2.2匹配TableB的three.2.2(三段拼接)one.1匹配TableB的one.1(两段拼接)- 只有
one.3在TableB中找不到对应的拼接值,所以会被筛选出来。
内容的提问来源于stack exchange,提问作者polycarp




