当前结果行集合上的MySQL联接或子查询
我有一个名为DEPARTMENTS的表,其中有一个名为EMPLOYEES的列,它是一个集合:当前结果行集合上的MySQL联接或子查询,mysql,Mysql,我有一个名为DEPARTMENTS的表,其中有一个名为EMPLOYEES的列,它是一个集合: department | employees ---------------------- sales | 100,107 support | 120,121 和另一个名为EMPLOYEES的表: employee | active ----------------- 100 | true 107 | false 120 | true 121 |
department | employees
----------------------
sales | 100,107
support | 120,121
和另一个名为EMPLOYEES的表:
employee | active
-----------------
100 | true
107 | false
120 | true
121 | true
我试图避免在结果中循环并建立另一个连接,只是为了确定员工是否处于活动状态。基本上,我需要另一个包含活跃员工的专栏,结果如下:
department | employees | active
-------------------------------
sales | 100,107 | 100
我尝试了我认为显而易见的方法:
SELECT departments.*, (SELECT GROUP_CONCAT(employee) FROM employees WHERE employee IN(departments.employees) AND active = true) AS active ...
它失败了,我不明白为什么,因为如果我手动执行此操作:
SELECT departments.*, (SELECT GROUP_CONCAT(employee) FROM employees WHERE employee IN(100,107) AND active = true) AS active ...
这很有效
任何建议都值得赞赏:)似乎是一个简单的问题,但出于某种原因,我无法理解。加入表并使用
group_concat()进行聚合
函数find_in_set()
可用于将每个员工链接到每个部门。
假设employees
中active
列的数据类型为Boolean
:
select d.department, d.employees,
group_concat(e.employee) active
from departments d left join employees e
on find_in_set(e.employee, d.employees) and e.active
group by d.department, d.employees
请参阅。
如果active
的数据类型为varchar
更改ON
子句:
and e.active = 'true'
请参阅。
结果:
| department | employees | active |
| ---------- | --------- | ------- |
| sales | 100,107 | 100 |
| support | 120,121 | 120,121 |
你期望的结果是什么?我用一个示例结果更新了我的问题(谢谢:)很好!伙计,谢谢你的帮助,比我要去的地方简单多了,我学到了一些东西:):)