MySQL中两个表中的复杂查询

时间:2015-09-06 11:26:20

标签: mysql sql

我在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需要完全匹配

任何想法?

1 个答案:

答案 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;