(mysql)如何在与另一个表连接时添加where条件的通配符?

(mysql)如何在与另一个表连接时添加where条件的通配符?,mysql,Mysql,我有一个查询需要进行一些更改,但我不知道该怎么做: 这是我的疑问: select * from user_data a left join user_group b on (a.role like b.role) 实际上userdata中的角色值是(varchar)'staff' 组中的角色价值是(varchar)的员工;安全金融学 所以我没有得到我期望的结果 我认为查询应该类似于此: select * from user_data a left join user_group b on

我有一个查询需要进行一些更改,但我不知道该怎么做:

这是我的疑问:

select * from user_data a
left join user_group b 
on (a.role like b.role)
实际上userdata中的角色值是(varchar)'staff'

组中的角色价值是(varchar)的员工;安全金融学

所以我没有得到我期望的结果

我认为查询应该类似于此:

select * from user_data a
left join user_group b 
on (b.role like a.role+";%") // using wildcard
我仍然不知道使用通配符来查询这个案例的正确方法

有人可以帮忙吗?

您可以使用:

注意-是否
b.role
只需在开始时匹配
a.role
?如果是
安全性怎么办;工作人员财务
?您可以执行
CONCAT(“%”,a.role“%”)

您可以执行
CONCAT('%'、'a.role'、'%')
来处理任何位置的匹配
a.role
,但是只有在您可以确保不会有嵌套的角色时。 例如:如果
b.role
staff
a.role
finance;园丁工作人员;安全性
,则该行将从查询中返回,即使角色是
gardenstaff
而不是staff

或者,您可以使用而不是像这样的
。这基本上是一个类似于
的正则表达式

特别是,正则表达式将匹配整个单词
staff
[[[::]]
代表单词边界,它阻止您匹配
gardenstaff
中的
staff

因此,您的查询可以是:

select * from user_data a
left join user_group b 
on (b.role RLIKE CONCAT('[[:<:]]',a.role,'[[:>:]]'))
从用户数据a中选择*
左加入用户组b
在(b.role-RLIKE-CONCAT('[[::]]'))

这将适用于<代码> B角色>代码>在分号>代码> A.角色< /代码> .< /P>中,我将为查询、前面、中间或最后三个条件。因此,我将使用或重复该条件3次,并更改通配符位置。。你觉得这样更好吗?@mathematic.coffee:谢谢,很高兴每天都能学到东西。@mathematic.coffee:你的第一个答案解决了我的问题。。现在我知道了一些新的东西,可以缩短我的查询时间。。谢谢你的解释。。

select * from user_data a
left join user_group b 
on (b.role RLIKE CONCAT('[[:<:]]',a.role,'[[:>:]]'))