1

私はmysqlを使用しています.2つのテーブルがあります

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

次の制限で従業員を取得したいと思います。従業員名には、部署名と共通する単語が少なくとも 1 つあります。

解決策は、select ステートメントまたはストアド プロシージャにすることができますか? ただし、任意の解決策は大歓迎です。

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, '%')

これにより、部門名に名前が含まれているすべての従業員が表示されます。ただし、従業員名の列が名前名前の場合、これはデータベースの設計が不適切であり、「少なくとも1つの一般的な単語」の制限を実装するのが少し難しくなります。名前を2つの列に分けてDBスキーマを変更するか、関数を使用する必要があります

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

名前などを分割します。これは醜くなります。これらの関数の詳細については、こちらをご覧ください。

とにかく、自分で試してみてください。さもないと、それを学ぶことができません。これは「私のためにすべての仕事をする」サイトではありません、そしてあなたが少なくともいくらかの研究努力を示すとき、より多くの人々が喜んで助けてくれます。幸運を。

于 2012-09-20T15:33:27.613 に答える