我是Oracle编程的新手。
我想查看" msg"值"表1和#34;反对"正则表达式"来自"表2和#34;的值
如果正则表达式如此匹配,我想更新相应的" regex_id"在"表1"。
常见查询: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
答案 0 :(得分:1)
你可以一起工作
UPDATE Table1
SET reg_exID = (SELECT reg_exID FROM Table2 WHERE REGEXP_LIKE(Table1.msg, regex));
请记住:
UPDATE
将失败。查看实际操作:SQL Fiddle(添加了一些数据以实际显示效果。)
如果需要澄清/调整,请发表评论。
答案 1 :(得分:1)
采用新增的"相关性"考虑到,使用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。