首页 > 解决方案 > 仅当该组连接列中存在特定值/值时,如何在 MySql 中进行组连接

问题描述

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

我,只有当员工在 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”我可以在不嵌套查询的情况下做到这一点。我必须处理大量记录,因此嵌套会减慢速度。

标签: mysqlsql

解决方案


你已经把你需要的信息整合在一起了。你只需要一个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说员工至少在其中之一。


推荐阅读