gpt4 book ai didi

mysql - 仅当该组连接列中存在特定值时,如何在 MySql 中进行组连接

转载 作者:行者123 更新时间:2023-11-29 05:49:51 26 4
gpt4 key购买 nike

我有一份员工名单,一名员工可以在多个部门工作。我想要一份所有员工和他们工作的所有部门的列表,只有当他们在 deptID 3 和 4 工作时。

我,e 只有当员工为部门 3 或 4 工作时,我才需要他工作的所有部门的列表。

SQL 查询像这样获取员工及其工作部门:

SELECT  e.`Emp_ID`,e.`FirstName`,e.`Address`
,GROUP_CONCAT(edd.Dept_id) AS dept_ids
,GROUP_CONCAT(edd.`Dept_Name`) AS dept_names

FROM employee e
INNER JOIN emp_dept_details edd
ON e.`Emp_ID` = edd.`Emp_ID`
GROUP BY e.`Emp_ID`;

结果:

"Emp_ID" "FirstName" "Address"  "dept_ids"       "dept_names"
"1" "emp1" "abcd" "3,9,12,13,11" "Eng,ESC,Mech,EEE,MIS"
"2" "emp2" "abcd1" "9,11,13,8" "Eng,MIS,EEE,CIS"

所以我不想要第二条记录,因为 group_concat 结果中不存在 deptID 3 或 4。

因为第一条记录包含 3,所以我想要整个列表“3,9,12,13,11”我可以在不嵌套查询的情况下这样做吗?我必须处理大量记录,因此嵌套会减慢速度。

最佳答案

您已经将所需的信息汇集在一起​​。您只需要一个 having 子句:

SELECT e.`Emp_ID`, e.`FirstName`, e.`Address`,
GROUP_CONCAT(edd.Dept_id) AS dept_ids,
GROUP_CONCAT(edd.`Dept_Name`) AS dept_names
FROM employee e JOIN
emp_dept_details edd
ON e.`Emp_ID` = edd.`Emp_ID`
GROUP BY e.`Emp_ID`
HAVING SUM( edd.Dept_id IN (3, 4) ) > 0;

HAVING 子句计算员工在两个部门的次数。 > 0 表示该员工至少在其中之一。

关于mysql - 仅当该组连接列中存在特定值时,如何在 MySql 中进行组连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55435383/

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