我在MySQL中有两个表。
第一个表是EMPLOYEES
,它包含LASTNAME, NAME, MIDDLENAME, BIRHDATE
这样的列以及有关员工的其他列。
第二个表是PROJECTS
。其中包括列STAFF
。
STAFF有像这样的行
lastname1 name1, middlename1; lastname2 name2, middlename2.....
我需要让员工来自员工。
查询
SELECT LASTNAME, NAME, MIDDENAME from EMPLOYEES where
CONCAT('%', LASTNAME, ' ', NAME, ' ',MIDDENAME, '%')
like (SELECT STAFF FROM PROJECTS)
不起作用,因为LIKE必须有来自第二个查询的一个子字符串
和查询
SELECT LASTNAME, NAME, MIDDENAME from EMPLOYEES where
CONCAT('%', LASTNAME, ' ', NAME, ' ',MIDDENAME, '%')
IN (SELECT STAFF FROM PROJECTS)
也不起作用,因为IN需要完全匹配
任何想法?
答案 0 :(得分:0)
当你在表格中划分了与规范化相反的字符串时会发生这种情况。首先考虑规范化你的表格。目前,您可以执行JOIN
,如下所示,但如果STAFF
列的格式与格式完全相同,则不会发生匹配。
SELECT e.LASTNAME, e.NAME, e.MIDDENAME
FROM EMPLOYEES e
JOIN PROJECTS p
ON CONCAT(e.LASTNAME, ' ', e.NAME, ' ', e.MIDDENAME) = p.STAFF;
您也可以使用如下所示的FIND_IN_SET()
功能,但请再次考虑先更改数据库设计并将表格标准化
SELECT LASTNAME,
NAME,
MIDDENAME
FROM (
SELECT LASTNAME, NAME,
MIDDENAME,
CONCAT(e.LASTNAME, ' ', e.NAME, ' ', e.MIDDENAME) as Full_Name
FROM EMPLOYEES) e
JOIN PROJECTS p
ON FIND_IN_SET(Full_Name, p.STAFF) > 0;