如何筛选字符长度与列值?SQLFiddle数据库列匹配需求
嘿,我来帮你解决这个SQL筛选和匹配的问题!先理清楚你的核心需求:找出每个无点单词对应的最长带点单词,同时把目标单词和无点单词所在行的第4列(也就是val字段)对应上对吧?结合你的表结构,我整理了两种实用方案,你可以按需选择:
方案一:精准获取每个无点单词的最长带点单词+对应val
这个方案先筛选出每个无点单词组里的最长带点单词,再关联原表拿到对应的val值,适合你需要唯一最长匹配的场景:
WITH longest_dot_words AS ( SELECT no_dot, MAX(LEN(word)) AS max_word_length, MAX(word) AS target_longest_word FROM words WHERE word LIKE '%.%' -- 只筛选带点的单词 GROUP BY no_dot ) SELECT ldw.target_longest_word, ldw.no_dot, w.val FROM longest_dot_words ldw INNER JOIN words w ON ldw.no_dot = w.no_dot WHERE w.word = w.no_dot; -- 确保取到的是无点单词行的val
方案二:为所有带点单词匹配对应无点单词的val
如果你的需求是给每一个带点单词(不管是不是最长)都匹配它所属无点单词的val,用这个更直接:
SELECT w1.word AS target_word, w1.no_dot, w2.val FROM words w1 INNER JOIN words w2 ON w1.no_dot = w2.no_dot WHERE w1.word LIKE '%.%' -- 只处理带点的目标单词 AND w2.word = w2.no_dot; -- 关联到无点单词的行获取val
关键逻辑拆解
- 用
LEN(word)计算字符长度,MAX(LEN(word))能快速定位每个无点单词组里的最长带点单词长度 - 通过
GROUP BY no_dot按无点单词分组,保证每个无点单词只对应一组最长结果 - 关联时依赖
no_dot字段作为匹配键,精准拿到无点单词所在行的第4列值
要是遇到多个长度相同的最长带点单词,你可以把MAX(word)改成STRING_AGG(word, ', ')来拼接所有符合条件的单词,灵活调整就行~
内容的提问来源于stack exchange,提问作者refaelo1979
相关产品推荐
相关产品推荐

