gpt4 book ai didi

mysql - MySQL中两个表的复杂查询

转载 作者:行者123 更新时间:2023-11-30 22:36:27 25 4
gpt4 key购买 nike

我在 MySQL 中有两个表。

第一个表是EMPLOYEES,它包含诸如LASTNAME, NAME, MIDDLENAME, BIRHDATE 等关于雇员的列。

第二个表是PROJECTS。其中包括 STAFF 列。工作人员有像这样的行lastname1 name1, middlename1; lastname2 name2, middlename2.....

我需要从 STAFF 中的 EMPLOYEES 那里找人。

查询

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

有什么想法吗?

最佳答案

这就是当您像表中的字符串那样对规范化进行分隔时会发生的情况。首先考虑规范化您的表格。现在,您可以像下面那样执行 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;

关于mysql - MySQL中两个表的复杂查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32423031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com