Presto实现数组元素与列值的反向匹配查询需求
反向匹配Presto查询的解决方案
嘿,我帮你调整好了满足需求的查询语句,核心就是把原有的匹配逻辑反转——从用数组元素匹配letter值改成判断letter值是否包含数组中的任意元素,这样就能得到你想要的输出结果啦。
with categories as( select category, names from( values ('1', ARRAY['aa', 'bb', 'cc']), ('2', ARRAY['dd', 'ee']) ) as t (category, names) ) select letter, category from letterstable join categories on cardinality(filter(names, x -> letter like concat('%', x, '%'))) > 0 -- 仅保留分类1的结果,若需要显示所有匹配分类可删除此条件 where category = '1'
关键调整说明:
- 原查询的匹配条件是
x like letter,意思是数组元素x要完全匹配letter的值;我们将其改为letter like concat('%', x, '%'),这样就实现了检查letter是否包含数组中任意元素的反向匹配逻辑。 cardinality(filter(...)) > 0用于确认数组中至少存在一个符合匹配条件的元素,以此建立两张表的关联关系。- 最后添加的
where category = '1'是为了匹配你给出的期望输出,只返回分类1的结果;如果需要展示所有匹配的分类,直接删除这个条件即可。
补充说明:
看你给出的期望输出里ddgas属于分类1,但按照参考中的分类数组,它应该匹配分类2的dd元素,这可能是示例数组和实际需求有出入?不过没关系,核心的反向匹配逻辑是通用的,你可以根据自己实际的分类数组调整即可。
内容的提问来源于stack exchange,提问作者snowboi
相关产品推荐
相关产品推荐

