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

标签 mysql sql

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

相关文章:

mysql - MySQL CREATE TABLE 语句中的 PRIMARY KEY 定义

MySQL 为什么这个 IF() 语句总是返回相同的值?

mysql - 我需要在 mysql 字段中查找并替换\n

mysql - 我需要一个 Git 钩子(Hook)来同步 MySql 模式

php - 使用我刚刚添加的索引列的数据

mysql - 如何找到表中具有满足特定条件的列的最大条目数?

mysql - 选择连接表中的字段在每一行中都相同的行

sql - Oracle - REGEXP_SUBSTR 前导零被忽略的问题

mysql - 如何在此上下文中正确使用 SQL COUNT() 函数?

mysql - 选择排除同一列中 mysql 查询中特定值的字段