mysql - 仅当该组连接列中存在特定值/值时,如何在 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”我可以在不嵌套查询的情况下做到这一点。我必须处理大量记录,因此嵌套会减慢速度。
解决方案
你已经把你需要的信息整合在一起了。你只需要一个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
说员工至少在其中之一。
推荐阅读
- react-native - 尝试结束代码时不断出现基于 React Native Maps 的解析错误
- android - Android Studio 3.5.2 找不到 USB 连接设备(但通过 adb 终端找到)
- python - AttributeError:“str”对象没有属性“find_all”
- html - 如何在不创建空白区域的情况下使图像被窗口大小吞噬
- mysql - SQL select last before by date and group by
- python - Python将绑定方法调用变为未绑定
- oracle - 关于为什么我在创建索引时出错的想法
- python - PyParsing Optional() 挂起
- python - 完全安装 tensorflow(所有模块)?
- c++ - 有时 ShowWindow 从不调用 OnShowWindow 并且主应用程序挂起