Mysql,在带有正则表达式的where子句中使用另一个表的字段值?

标签 mysql regex

我打算用蛮力的方式做到这一点,但我想知道是否有更优雅/有效的解决方案:

拿一个简单的表格,人:

RecNum    Category     Name
1001      A            Alice
1002      A            Bob
1003      B            Charlie
1004      C            Doug
1005      A            Ernie

还有另一个表 NEWS,它基本上只是一个带有可选内联标记的文本字段:

RecNum     NewsText
201        Blah blah {p1003}
202        Blah blah blah
203        Blah {p1005}
204        {p1002} blah blah
205        Blah {p1003} blah

'{p####}'用于内部解析:'p'表示它是PEOPLE表,'####'是PEOPLE记录的RecNum,并且标记被替换为名称...因此,当显示时,NEWS RecNum 201 将显示“Blah blah Charlie”。

我需要做的是,给定 PEOPLE Category 值,找到包含给定类别的所有 PEOPLE 的“{p####}”RecNum 的 NEWS 记录的不同计数。

例如,对于上述 3 个类别,返回结果应为:

Category A: 2 (from NEWS records 203 and 204)
Category B: 1 (need distinct count, even though Charlie (1003) shows up in 2 NEWS records (201 & 205))
Category C: 0 (not found)

我正在尝试使用 Regexp 来执行此操作,但不知道如何告诉它要查找什么(具有给定类别的每条记录的 RecNum)

这可能吗?正则表达式不是执行此操作的方法吗?

感谢任何帮助/指导!

编辑: ...或者获取整个 NEWS 表并在 php 中解析它会更容易吗?

-G

最佳答案

无需正则表达式即可完成此操作。

SELECT count(distinct(people.RecNum)) from people
LEFT JOIN news on news.NewsText like concat('%{p', people.RecNum , '}%')
WHERE news.NewsText like concat('%{p', people.RecNum , '}%')
AND people.Category='A'

关于Mysql,在带有正则表达式的where子句中使用另一个表的字段值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40646735/

相关文章:

mysql - 根据不同用户账户更新MySQL全局变量?

ruby - 正则表达式问题 - 用空格替换所有前面没有制表符的换行符

php - 如何在 php 正则表达式中的下划线后创建大写字母

php - 什么是 mysql 链接标识符,它的重要性是什么?

mysql - 左连接与 md5(concat()) mysql 进行比较

php - 在 mysql 中可能是这样的(LIKE 运算符)

c# - 匹配控制字符之前出现的字符,如果控制字符不存在则匹配零

mysql - 从列数

javascript - JS 将长文本替换为较小的文本

java - 替换之前更改结果组文本?