[英]MySQL Join multiple rows in one column with condition
ID|NAME |SURNAME
1 |James|Smith
2 |Jack |Sparrow
IDPERSON|IDDEPARTMENT
1 |1
1 |2
2 |2
ID|NAME
1 |customer_service
2 |store
我需要做的是选择人员及其部门,并按一个或多个部门进行筛选。 现在,我可以选择所有人员及其部门,但是无法按部门名称过滤结果:
SELECT person.name, person.surname, GROUP_CONCAT(distinct department.name SEPARATOR ', ') as departments
LEFT JOIN peopledepartment ON person.id=department.idperson
INNER JOIN department ON peopledepartment.iddepartment=department.id
该查询的输出为:
NAME |SURNAME|DEPARTMENTS
James|Smith |customer_service, store
Jack |Sparrow|store
我需要按department.name ='customer_service'筛选结果,因此结果仅为:
NAME |SURNAME|DEPARTMENTS
James|Smith |customer_service, store
有任何想法吗? 提前致谢!
使用having
子句:
SELECT p.name, p.surname,
GROUP_CONCAT(distinct d.name SEPARATOR ', ') as departments
FROM person p INNER JOIN
peopledepartment pd
ON p.id = pd.idperson INNER JOIN
department d
ON pd.iddepartment = d.id
GROUP BY p.name, p.surname
HAVING SUM(d.name = 'customer_service') > 0;
笔记:
group_concat()
可能不需要distinct
。 from
子句。 having
子句计算与给定部门匹配的行数。 > 0
表示存在至少一个这样的匹配项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.