我有一份员工名单,一名员工可以在多个部门工作。 我想要一份所有员工和他们工作的所有部门的列表,只有当他们在 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/