You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Trino的MATCH_RECOGNIZE获取所有ABC匹配结果?

解决方案

方法一:使用关联查询直接获取所有匹配

你的需求是找出所有满足A.id < B.id < C.id的三元组(其中C为id=6的唯一记录),用普通JOIN查询更直接,能准确得到所有期望结果:

SELECT 
    a.id AS a_id, a.value AS a_val,
    b.id AS b_id, b.value AS b_val,
    c.id AS c_id, c.value AS c_val
FROM abc a
JOIN abc b ON a.id < b.id
JOIN abc c ON b.id < c.id
WHERE 
    a.value = 'A' 
    AND b.value = 'B' 
    AND c.value = 'C';

执行后会返回你需要的3条结果:

a_id | a_val | b_id | b_val | c_id | c_val
-----+-------+------+-------+------+-------
   1 | A     |    2 | B     |    6 | C
   1 | A     |    4 | B     |    6 | C
   3 | A     |    4 | B     |    6 | C

原有MATCH_RECOGNIZE查询的问题分析

你尝试的两种跳过策略都无法满足需求:

  1. after match skip to next row:每次匹配后跳到下一行,后续扫描无法回溯匹配之前的A记录(比如匹配完1A-2B-6C后,从id3开始扫描,无法再关联id1的A和id4的B)。
  2. after match skip to first A:会触发无限循环,因为扫描到C后又跳回前面的A,重复处理同一批数据。

Trino的MATCH_RECOGNIZE更适合处理连续或半连续的模式匹配(按顺序出现的序列,不要求回溯匹配之前的记录),对于这种需要枚举所有跨位置组合的场景,关联查询是更高效且直观的选择。

内容的提问来源于stack exchange,提问作者user22614632

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 22:07:18