【问题标题】:Issue in SQL statement to get record combination using "in"在 SQL 语句中发出使用“in”获取记录组合的问题
【发布时间】:2012-06-01 03:24:23
【问题描述】:

我有一个包含 2 列的表,例如 Empname、DepartmentName,其中一名员工可能在多个部门工作,反之亦然。 我想编写一个查询以根据某些部门组合选择 EmpName。 例如。仅在 Dept1、Dept2 和 Dept3 下工作的员工(在这种情况下应该只选择仅在 3 个部门下工作的员工)

这是我尝试过的查询。

Select EmpName, Count(*) as Total from Emp_Departments where DepartmentName in ('Dept1', 'Dept2', 'Dept3') group by EmpName having Total=3

这里的问题是,任何在上述任何部门工作且总人数为 3 的员工,它也会返回他们的行。 请建议我如何才能获得唯一的组合。

【问题讨论】:

  • 你的表的结构是什么? EmpName 是唯一的吗? EmpName,DepartmentName 的组合也是唯一的吗?
  • 是的,EmpName 和 Department 的组合是唯一的
  • 单独EmpName 怎么样?这是独一无二的吗?
  • 不,Empname 是重复的,因为一个 empname 可以与多个 depatnames 关联。
  • 在这种情况下,您将无法实现您想要的。您将需要一个唯一的字段来区分两个同名的员工。

标签: mysql sql aggregate-functions


【解决方案1】:

你很亲密 - 使用:

  SELECT d.EmpName, COUNT(*) as Total 
    FROM Emp_Departments d
   WHERE d.DepartmentName IN ('Dept1', 'Dept2', 'Dept3') 
GROUP BY d.EmpName 
  HAVING COUNT(DISTINCT d.DepartmentName) = 3

【讨论】:

  • 这不起作用,因为提到的 OP EmpName 不是唯一的
  • @zi42: 不相关——即分组依据的列。
  • 好的。我认为他试图区分许多同名的员工,这两种方式都没有意义。
  • @OMGPonies 它显示了更多不相关的记录,也有超过 3 条记录。
  • @Ajay:是的,它会显示那些有重复的,但只显示IN 子句中部门名称的重复。您的表需要对员工和部门名称列进行唯一约束...
猜你喜欢
  • 2015-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 2014-10-31
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
相关资源
最近更新 更多