1

我正在使用 mysql,我有 2 个表

emp(id int, name varchar, dept_id int)
dept(id int, name varchar)

我想获得具有以下限制的员工:员工姓名与他/她的部门名称至少有 1 个常用词。

解决方案可以是选择语句还是存储过程?但是,欢迎任何解决方案。

4

2 回答 2

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),
                   ' ',
                   '[[:>:]]|[[:<:]]'
               ),
               '[[:>:]])');
于 2012-09-21T06:13:39.987 回答
0
SELECT
*
FROM
emp
INNER JOIN dept ON emp.dept_id = dept.id
WHERE
emp.name LIKE CONCAT('%', dept.name, '%')

这将为您提供姓名在其部门名称中的所有员工。但是,如果员工姓名列是前名姓氏,这是糟糕的数据库设计,并且实施“至少一个常用词”的限制有点困难。通过将名称分成两列来更改数据库架构,或者您将不得不使用这些函数

  • substring()
  • substring_index()
  • length()

拆分名称等。这会变得很难看。在此处阅读有关这些功能的更多信息。

反正你自己试试,不然学不会。这不是一个“为我做所有工作”的网站,当你至少表现出一些研究努力时,会有更多的人愿意提供帮助。祝你好运。

于 2012-09-20T15:33:27.613 回答