You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

拼接表字段后左连接SQL需求:筛选TableA独有的记录

左连接筛选仅存在于TableA的记录方案

没问题,我来帮你梳理这个查询的实现思路和完整语句:

首先,我们的核心目标是找出TableA中那些无法匹配到TableB任何拼接格式(Col1.Col2Col1.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;

关键逻辑解释

  1. 连接条件设计:通过IN子句让TableA的Col1与TableB字段拼接后的两种格式做匹配——既检查两段式的Col1.Col2,也检查三段式的Col1.Col2.Col3,覆盖TableA中不同格式的字段值。
  2. 筛选规则:左连接特性决定了,如果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

火山引擎 最新活动