我的数据库中有以下表格:
表:员工
ID Name
-- ----
1 Mike
2 Peter
3 Daniel
表:位置
EmployeeID City
---------- ----
1 Berlin
1 Stuttgart
1 München
2 Hamburg
3 Stuttgart
3 Berlin
Employee表包含有关员工的信息。 “位置”表包含有关员工所在项目的位置的信息(例如Mike在柏林,斯图加特和慕尼黑的项目)。
我现在要做的是按照阵列中的给定位置过滤员工,但仍然检索每个员工的所有位置。例如,按数组["Berlin", Stuttgart]
过滤应返回以下结果:
ID Name City
-- ---- ----
1 Mike Berlin, Stuttgart, München
3 Daniel Stuttgart, Berlin
我知道我可以使用GROUP_CONCAT()
来连接位置。但是我该如何进行过滤呢?我需要能够使用SQL来完成它。
答案 0 :(得分:3)
应用WHERE
条件从EmployeeID
表中获取Location
:
SELECT
Employee.*,
GROUP_CONCAT(Location.City)
FROM
Employee
INNER JOIN Location
ON Employee.ID=Location.EmployeeID
INNER JOIN
(SELECT DISTINCT
EmployeeID
FROM
Location
WHERE
City IN ('Berlin', 'Stuttgart')) AS IDS
ON Employee.ID=IDS.EmployeeID
GROUP BY
Employee.ID
- 检查fiddle。
替代解决方案是使用HAVING
子句与普通查询和INSTR()
,但我不建议您这样做,因为HAVING
中的比较会很慢,此外,值列表将产生多重比较。
答案 1 :(得分:0)
您可以使用以下查询:
SELECT
a.id,a.`name`,GROUP_CONCAT(b.city)
FROM employee a
JOIN
(SELECT DISTINCT employeeid,city FROM location WHERE location IN ('Berlin', 'Stuttgart')) b
ON a.id=b.employeeid
GROUP BY a.id;