在mysql中查找具有常用词的字符串
我使用的是mysql,我有两个表在mysql中查找具有常用词的字符串,mysql,Mysql,我使用的是mysql,我有两个表 emp(id int, name varchar, dept_id int) dept(id int, name varchar) 我想让员工受到以下限制: 员工姓名与他/她的部门名称至少有一个常用词 解决方案可以是select语句或存储过程?然而,任何解决办法都是受欢迎的 SELECT * FROM emp INNER JOIN dept ON emp.dept_id = dept.id WHERE emp.name LIKE CONCAT('%', dep
emp(id int, name varchar, dept_id int)
dept(id int, name varchar)
我想让员工受到以下限制:
员工姓名与他/她的部门名称至少有一个常用词
解决方案可以是select语句或存储过程?然而,任何解决办法都是受欢迎的
SELECT
*
FROM
emp
INNER JOIN dept ON emp.dept_id = dept.id
WHERE
emp.name LIKE CONCAT('%', dept.name, '%')
这将为您提供所有以部门名称命名的员工。但是,如果员工姓名列是prename和姓氏,则这是糟糕的数据库设计,并且实现“至少一个常用词”限制会有点困难。要么通过将名称分成两列来更改DB模式,要么必须使用函数
substring()
substring\u index()
length()
substring()
substring\u index()
length()
emp.name
使用并创建搜索字符串。这是你的电话号码
选择emp.id,
emp.name emp_name,
部门名称emp中的部门名称
加入部门
其中emp.dept\u id=dept.id
及
部门名称regexp
CONCAT('([[:]|[[::]]);
使用并从emp.name
创建搜索字符串。这是你的电话号码
选择emp.id,
emp.name emp_name,
部门名称emp中的部门名称
加入部门
其中emp.dept\u id=dept.id
及
部门名称regexp
CONCAT('([[:]|[[::]]);
select emp.id,
emp.name emp_name,
dept.name dep_name from emp
join dept
where emp.dept_id=dept.id
AND
dept.name regexp
CONCAT('([[:<:]]',
REPLACE(
TRIM(emp.name),
' ',
'[[:>:]]|[[:<:]]'
),
'[[:>:]])');