繁体   English   中英

MySQL在有条件的情况下在一列中连接多行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM