[英]Select records that appear more than once
我试图选择出现不止一次且属于特定部门和其他部门的记录。
到目前为止,我所拥有的查询是这样的:
SELECT employeeCode, employeeName
FROM
Employees
WHERE
Department <> 'Technology'
AND employeeCode IN (SELECT employeeCode
FROM Employees
GROUP BY employeeCode HAVING COUNT(*) > 1)
问题是我想选择属于技术部门的员工,但他们也参与其他部门。
因此,它们必须来自技术部门,但也可以来自家庭部门。 在数据库中,它可能类似于:
1 | A1 | Alex | Technology
2 | A2 | Thor | Household
3 | A3 | John | Cars
4 | A3 | John | Technology
5 | A4 | Kim | Technology
6 | A4 | Kim | Video Games
因此,基本上查询应该返回:
A3 | John |
A4 | Kim |
我认为这是我遗漏的一小部分,但是..关于如何对其进行过滤/分类以使其始终使用技术和其他部门的任何想法?
顺便说一句,我尝试搜索,但是找不到像我这样的问题。
如果您希望可以在技术部门和其他部门工作的员工:
select e.employeeCode, e.employeeName
from employees e
group by e.employeeCode, e.employeeName
having sum(case when e.department = 'Technology' then 1 else 0 end) > 0 and
count(*) > 1;
假定表中没有重复项。 如果可以重复,则使用count(distinct department) > 1
而不是count(*) > 1
。
尝试这个:
SELECT E.employeeCode, E.employeeName
FROM Employees E
INNER JOIN (SELECT DISTINCT E1.employeeCode, E1.employeeName
FROM Employees E
WHERE E.Department = 'Technology'
) AS A ON E.employeeCode = A.employeeCode AND E.employeeName = A.employeeName
GROUP BY E.employeeCode, E.employeeName
HAVING COUNT(*) > 1;
您可以将EXISTS与关联的子查询结合使用,并在不同条件下连接到同一张表。
SELECT e1.employeeCode, e1.employeeName
FROM Employees e1
WHERE e1.Department = 'Technology'
AND EXISTS (SELECT * FROM Employees e2
WHERE e1.employeeCode = e2.employeeCode
AND e2.Department <> 'Technology')
这将适合您的情况:
SELECT a.employeeCode, a.employeeName
FROM Employees a, Employees b
WHERE
a.Department = 'Technology'
AND
b.Department <> 'Technology'
AND
a.employeeCode = b.employeeCode
AND
a.employeeID <> b.employeeID
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.