私はOracleプログラミングに不慣れです。
「Table1」の「msg」値を「Table2」の「regex」値と照合したいと思います。
正規表現がそのように一致する場合、「Table1」のそれぞれの「regex_id」を更新したいと思います。
通常のクエリ: SELECT 'match found' FROM DUAL WHERE REGEXP_LIKE('s 27', '^(s27|s 27)')
表1
MSG REG_EXID
Ss27 ?
s27 ?
s28 ?
s29 ?
表2
REGEX REG_EXID RELEVANCE
^(s27|s 27) 1 10
^(s29|s 29) 2 2
^(m28|m 28) 3 2
^(s27|s 27) 4 100
新しく追加された「関連性」を考慮に入れて、Oracle11gを使用して試してみることができます
UPDATE Table1 T1
SET T1.reg_exID =
(SELECT DISTINCT
MAX(reg_exID) KEEP (DENSE_RANK FIRST ORDER BY relevance DESC) OVER (PARTITION BY regex)
FROM Table2
WHERE REGEXP_LIKE(T1.msg, regex)
)
;
SQLFiddleを参照してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加