我正在使用 mysql,我有 2 个表
emp(id int, name varchar, dept_id int)
dept(id int, name varchar)
我想获得具有以下限制的员工:员工姓名与他/她的部门名称至少有 1 个常用词。
解决方案可以是选择语句还是存储过程?但是,欢迎任何解决方案。
我正在使用 mysql,我有 2 个表
emp(id int, name varchar, dept_id int)
dept(id int, name varchar)
我想获得具有以下限制的员工:员工姓名与他/她的部门名称至少有 1 个常用词。
解决方案可以是选择语句还是存储过程?但是,欢迎任何解决方案。
使用REGEXP并从emp.name
. 这是SQLFiddle 演示
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),
' ',
'[[:>:]]|[[:<:]]'
),
'[[:>:]])');
SELECT
*
FROM
emp
INNER JOIN dept ON emp.dept_id = dept.id
WHERE
emp.name LIKE CONCAT('%', dept.name, '%')
这将为您提供姓名在其部门名称中的所有员工。但是,如果员工姓名列是前名和姓氏,这是糟糕的数据库设计,并且实施“至少一个常用词”的限制有点困难。通过将名称分成两列来更改数据库架构,或者您将不得不使用这些函数
substring()
substring_index()
length()
拆分名称等。这会变得很难看。在此处阅读有关这些功能的更多信息。
反正你自己试试,不然学不会。这不是一个“为我做所有工作”的网站,当你至少表现出一些研究努力时,会有更多的人愿意提供帮助。祝你好运。