我是 Oracle 编程新手。
我想根据“Table2”中的“regex”值检查“Table1”的“msg”值。
如果正则表达式如此匹配,我想更新“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
最佳答案
考虑到新添加的“相关性”,您可以尝试使用 Oracle 11g
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)
)
;
参见SQL Fiddle .
关于regex - 将列值与存储在另一个表中的正则表达式值列表进行比较并进行相应更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27669782/