mysql - 当前结果行的 SET 上的 MySQL JOIN 或 SUBQUERY
问题描述
我有一个名为 DEPARTMENTS 的表,它有一个名为 EMPLOYEES 的列,它是一个 SET:
department | employees
----------------------
sales | 100,107
support | 120,121
另一个名为 EMPLOYEES 的表:
employee | active
-----------------
100 | true
107 | false
120 | true
121 | true
我试图避免循环遍历结果并建立另一个连接以确定 EMPLOYEE 是否处于活动状态。基本上,我需要另一个包含 ACTIVE 员工的专栏,结果类似于:
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()
可用于将每个员工链接到每个部门。
假设 in 列的数据active
类型employees
为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
请参阅演示。
Ifactive
的数据类型是varchar
更改ON
子句:
and e.active = 'true'
请参阅演示。
结果:
| department | employees | active |
| ---------- | --------- | ------- |
| sales | 100,107 | 100 |
| support | 120,121 | 120,121 |
推荐阅读
- java - Java合并重叠日期间隔
- open-policy-agent - 捆绑加载失败:附加日志会有所帮助
- python - 剪刀石头布游戏中的“全球”头痛
- ruby-on-rails - AWS 签名版本 4 签名密钥问题 ruby
- activerecord - 保存时带有 SQLite3 错误的 ActiveRecord:没有这样的列
- regex - 查找字符左侧的单词正则表达式
- javascript - 运行“npx create-react-app”时存在多个漏洞
- android - Android 文件选择器
- r - 如何将变量名绑定到df
- plsql - 在 PL SQL 中将一行的一列用作下一列的输入的结果