regex - 将列值与存储在另一个表中的正则表达式值列表进行比较并进行相应更新

标签 regex oracle oracle11g

我是 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/

相关文章:

sql - 使用 Oracle Regexp 从字段中提取电子邮件

oracle - Oracle 中的外键约束问题

sql - ora-01086 : save point was not established or invalid

mysql - 查询两个表不带 "inner join"

regex - 判断一个字符串是否只包含 ASCII 字符

oracle - Oracle客户端安装错误-路径太长

oracle - 安装 sql loader linux

python re.sub 组 : number after\number

javascript - 如何在jquery中获取字符串中所有无效字符的值?

php - 验证新西兰电话号码的正则表达式