假设我有一个名为People
的表格,列PersonID
和Name
,我可以选择一个人名:
SELECT Name FROM People WHERE PersonID = 1
对于此示例,将返回'John'。
我还有另一个名为ForumPosts
的表,其中包含ForumPostID
和PostContent
字段,其中PostContent只是TEXT
,就本例而言,它可能类似于{{} 1}}或"My Name is John"
现在我想执行一个Query,它基于给定的初始PersonID将返回ForumPosts中所有行,其中Person的名称与PostContent字段中包含的单词匹配。
与单个单词匹配的正则表达式(或在此情况下为该人的姓名)为:
"John likes football"
理想情况下,我希望我的SQL逻辑类似于:
[[:<:]]*Person'sNameHere*[[:>:]]
但是我不确定这是否可行,或者我将如何构建查询。
答案 0 :(得分:1)
听起来你想动态创建一个正则表达式。正则表达式只是MySQL中的字符串,因此您只需使用CONCAT
来创建所需的字符串。
SELECT *
FROM ForumPosts
WHERE PostContent
REGEXP CONCAT('[[:<:]]',(SELECT Name FROM People WHERE PersonID = '1'),'[[:>:]]')
更好的是,您可以使用JOIN而不是子查询
SELECT ForumPosts.*
FROM ForumPosts
JOIN People ON PersonID = 1
WHERE PostContent REGEXP CONCAT('[[:<:]]',People.Name,'[[:>:]]')
答案 1 :(得分:0)
您可以使用exists
子查询来实现此逻辑。如果我理解你的逻辑:
select fp.*
from ForumPosts fp
where exists (select 1
from people p
where personid = '1' and
fp.PostContent regex concat('[[:<:]]', name, '[[:>:]]')
)