Mysql 使用数组进行SQL筛选
我的数据库中有以下表格: 表格:员工Mysql 使用数组进行SQL筛选,mysql,sql,filter,group-concat,Mysql,Sql,Filter,Group Concat,我的数据库中有以下表格: 表格:员工 ID Name -- ---- 1 Mike 2 Peter 3 Daniel 表格:位置 EmployeeID City ---------- ---- 1 Berlin 1 Stuttgart 1 München 2 Hamburg 3 S
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\u CONCAT()
连接位置。但是我怎么做过滤呢?我需要能够使用SQL执行此操作。应用WHERE
条件从位置表中获取员工ID
:
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
-检查一下
另一种解决方案是使用带有简单查询的HAVING
子句,例如,但我不建议您这样做,因为在HAVING
中进行比较会很慢,而且,值列表会产生多个比较。您可以使用以下查询:
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;
你想要SQL还是MySQL?太棒了。非常感谢:)