求SQL查询语句:筛选根路径含1.2.4的最高层级数据
筛选根路径为1.2.4的最高层级数据SQL解决方案
要筛选出根路径包含1.2.4的最高层级数据(排除所有属于其他条目子级的记录),可以通过以下几种SQL实现方式解决:
方法1:使用NOT EXISTS(修正版)
如果之前使用NOT EXISTS未得到正确结果,大概率是父级匹配条件有误。正确的写法需要确保当前记录的路径是另一条记录路径的完整子级(即父级路径后紧跟.和后续层级):
SELECT t1.path FROM path_table t1 WHERE -- 匹配根路径为1.2.4的所有记录(包含直接根节点1.2.4) (t1.path = '1.2.4' OR t1.path LIKE '1.2.4.%') AND NOT EXISTS ( SELECT 1 FROM path_table t2 WHERE -- 确认t1是t2的子级 t1.path LIKE CONCAT(t2.path, '.%') -- 同时t2也属于1.2.4根路径下 AND (t2.path = '1.2.4' OR t2.path LIKE '1.2.4.%') );
方法2:使用LEFT JOIN筛选无父级的记录
通过左连接父级记录,筛选出没有匹配到父级的条目,即为最高层级数据:
SELECT t1.path FROM path_table t1 LEFT JOIN path_table t2 ON t1.path LIKE CONCAT(t2.path, '.%') AND (t2.path = '1.2.4' OR t2.path LIKE '1.2.4.%') WHERE (t1.path = '1.2.4' OR t1.path LIKE '1.2.4.%') AND t2.path IS NULL;
关键说明
- 核心逻辑:判断当前记录是否存在一个同根路径下的父级记录(父级路径+
.是当前路径的前缀) - 使用
CONCAT(t2.path, '.%')而非单纯的LIKE t2.path '%',可以避免类似1.2.4.41被误判为1.2.4.4子级的情况
内容的提问来源于stack exchange,提问作者Sara Bernar
相关产品推荐
相关产品推荐

