【问题标题】:Returning customers / 2 conditions / 1id many rows回头客 / 2 个条件 / 1id 多行
【发布时间】:2022-01-23 21:38:42
【问题描述】:

我有一个表,其中包含 manager_id 列(许多 ID 和同一 ID 的许多行)和 employee_id(许多 ID,有时一个员工为多个经理工作)。

如何返回包含“X”和“Y”员工的 manager_id 列表?我尝试使用 HAVING X 和 Y,但它不在同一行,因为 1manager_id 在一行中有 1employee_id,所以这是不可能的。有办法吗?

【问题讨论】:

  • 只标记您使用的数据库
  • 自加入。标准方法。
  • 此表的结构如何允许单个员工的多个(直接/非层次结构)经理?

标签: sql


【解决方案1】:

我不确定这是否是您要查找的内容,但您应该查看GROUP_CONCAT(如果您使用的是 MySQL):

"GROUP_CONCAT 是一个连接/合并数据的函数 多行到一个字段中。它是一个 GROUP BY 函数,它返回 如果组包含至少 1 个非空值,则为字符串,如果包含 不是,它返回一个 Null 值。”

这是基本语法(链接的网站包含对其他可能的关键字的解释,例如 DISTINCT 和 ORDER_BY,这可能对您有用):GROUP_CONCAT(column[ SEPARATOR string]) - 分隔符部分是可选的(查看下面的示例)(默认分隔符是',')。

其他数据库也有等价物:

PostgreSQL(版本 9+)和 SQL Server 2017+:string_agg(column[, separator])

这是您的查询在 MySQL 中的样子:

SELECT id, manager_id, GROUP_CONCAT(employee_id) FROM manager_employees GROUP BY manager_id;

如果您想使用默认分隔符以外的分隔符

SELECT id, manager_id, GROUP_CONCAT(employee_id SEPARATOR ' - ') FROM manager_employees GROUP BY manager_id;

参考:

【讨论】:

  • 工作,谢谢!
  • 没问题!如果可能,您能否将答案标记为已接受? @Sql_beginner_europe
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-07
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
  • 2017-02-28
相关资源
最近更新 更多