如何用SQL查询满足前缀匹配条件的System 2不匹配记录?
问题解答
能否用JOIN实现需求?
可以,使用LEFT JOIN配合NULL判断就能实现你的需求,同时你尝试的NOT EXISTS写法也能达成目标(不过你的原SQL存在语法问题)。
正确的JOIN实现语句
核心逻辑是将System2的a字段与System1的a字段前6位做关联,筛选出关联失败的System2记录:
SELECT s2.* FROM System2 s2 LEFT JOIN System1 s1 ON s2.a = SUBSTRING(s1.a, 1, 6) WHERE s1.a IS NULL;
逻辑说明
LEFT JOIN会保留System2的所有记录,若System2的a能匹配到System1中a的前6位,对应行的System1字段会有值;未匹配到的行,System1的所有字段会为NULL- 通过
WHERE s1.a IS NULL筛选,就能得到System2中所有不匹配的记录
你原SQL的问题修正
你提供的SQL存在语法错误,正确的NOT EXISTS写法应该是:
SELECT s2.* FROM System2 s2 WHERE NOT EXISTS ( SELECT 1 FROM System1 s1 WHERE s2.a = SUBSTRING(s1.a, 1, 6) );
这个写法和LEFT JOIN的实现效果等价(在表中无重复匹配记录的场景下)。
内容的提问来源于stack exchange,提问作者Arina Pelagiya
相关产品推荐
相关产品推荐

