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?太棒了。非常感谢:)