私はmysqlを使用しています.2つのテーブルがあります
emp(id int, name varchar, dept_id int)
dept(id int, name varchar)
次の制限で従業員を取得したいと思います。従業員名には、部署名と共通する単語が少なくとも 1 つあります。
解決策は、select ステートメントまたはストアド プロシージャにすることができますか? ただし、任意の解決策は大歓迎です。
私はmysqlを使用しています.2つのテーブルがあります
emp(id int, name varchar, dept_id int)
dept(id int, name varchar)
次の制限で従業員を取得したいと思います。従業員名には、部署名と共通する単語が少なくとも 1 つあります。
解決策は、select ステートメントまたはストアド プロシージャにすることができますか? ただし、任意の解決策は大歓迎です。
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, '%')
これにより、部門名に名前が含まれているすべての従業員が表示されます。ただし、従業員名の列が名前と名前の場合、これはデータベースの設計が不適切であり、「少なくとも1つの一般的な単語」の制限を実装するのが少し難しくなります。名前を2つの列に分けてDBスキーマを変更するか、関数を使用する必要があります
substring()
substring_index()
length()
名前などを分割します。これは醜くなります。これらの関数の詳細については、こちらをご覧ください。
とにかく、自分で試してみてください。さもないと、それを学ぶことができません。これは「私のためにすべての仕事をする」サイトではありません、そしてあなたが少なくともいくらかの研究努力を示すとき、より多くの人々が喜んで助けてくれます。幸運を。