当前位置: 首页 > 面试题库 >

选择仅属于特定部门的用户

沃瑾瑜
2023-03-14
问题内容

我有下表,其中包含两个字段,即a和b,如下所示:

create table employe
(
    empID varchar(10),
    department varchar(10)
);

插入一些记录:

insert into employe values('A101','Z'),('A101','X'),('A101','Y'),('A102','Z'),('A102','X'),
             ('A103','Z'),('A103','Y'),('A104','X'),('A104','Y'),('A105','Z'),('A106','X');


select * from employe;



empID   department
------------------
A101    Z
A101    X
A101    Y
A102    Z
A102    X
A103    Z
A103    Y
A104    X
A104    Y
A105    Z
A106    X

注意
:现在我要向员工显示唯一且仅属于部门Z和部门的员工Y。因此,根据条件,只A103应显示雇员,因为他仅属于部门Z和部门Y。但是员工A101不应因为属于而出现Z,X, and Y

预期结果

如果条件为:ZY则结果应为:

empID
------
A103

如果条件为:ZX则结果应为:

empID
------
A102

如果条件是:ZX并且Y随后的结果应该是:

empID
------
A101

注意 :我只想在where子句中执行此操作(不想使用group byandhaving子句),因为我where还将在另一个子句中包含该子句。


问题答案:

第一个解决方案

sqlfiddle

SELECT empId
FROM (
    SELECT
        empID, cc = COUNT(DISTINCT department)
    FROM employe
    WHERE department IN('Y', 'Z')
    GROUP BY empID
)t
WHERE
    t.cc = 2
    AND t.cc = (
        SELECT COUNT(*)
        FROM employe
        WHERE empID = t.empID
    )

第二解决方案

sqlfiddle

SELECT e.empId
FROM employe e
WHERE e.department IN('Y', 'Z')
GROUP BY e.empID
HAVING
    COUNT(e.department) = 2
    AND COUNT(e.department) = (SELECT COUNT(*) FROM employe WHERE empID = e.empId)

不使用GROUP BYHAVING

SELECT DISTINCT e.empID
FROM employe e
WHERE
    EXISTS(
        SELECT 1 FROM employe WHERE department = 'Z' AND empID = e.empID
    )
    AND EXISTS(     
        SELECT 1 FROM employe WHERE department = 'Y' AND empID = e.empID
    )
    AND NOT EXISTS(
        SELECT 1 FROM employe WHERE department NOT IN('Y', 'Z') AND empID = e.empID
    )


 类似资料:
  • 问题内容: 我只想选择特定的列(例如)。我有一个通用的DAO,我想到的是: 错误是: 。我应该如何改变呢?我想获取一个类型对象,该对象仅具有和字段,而其他所有对象都是。 类型扩展有两个字段。 是。 问题答案: 仅获取特定列的JPA方法之一是请求一个Tuple对象。 在您的情况下,您需要编写如下内容: 如果您有一个代表结果的类(例如您的情况),则可以采用另一种方法。不必是Entity类。如果具有类似

  • 问题内容: 我正在寻找一种选择SQL服务器上所有数据库的方法,这些数据库仅包含表“ dbo.mytable” 我怎样才能做到这一点 ? 我已经有了这两个sql查询: 和 第一个查询列出我的sql服务器上的所有数据库,第二个查询检查dbo.mytable是否存在。我想将它们合并。 谢谢 问题答案: 一种将它们全部归还到一个结果集中的简洁方法是

  • 你们能帮我解决这个问题吗?我想修改它,以便它只显示来自此查询(78%)的至少3名员工的部门,而不是来自(原始的员工/部门表)。每次我尝试“having COUNT(department_ID)或@the WHERE子句”都会给我一个错误。我需要做第二次连接吗?谢谢。 EMPLOYEE_ID EMPLOYEE_NAME工资DEPARTMENT_ID DEPT_NAME MAX_SAL 选定6行

  • 我想将JTable中的行选择限制为仅2行。如果用户尝试选择第三行(Ctrl单击),则应通过编程方式取消选择表中最早的选择。为了实现这一点,我在表中添加了一个ListSelectionListener。在下面的示例中,似乎不起作用。 如果有更简单或更优雅的方法来达到同样的效果,请给出建议。

  • 问题内容: 在XML文档中,我具有共享相同名称的元素,但是属性的值定义了它是什么类型的数据,并且我想从文档中选择所有具有特定值的元素。我是否需要使用XPath(如果可以,您是否可以建议正确的语法)还是有更优雅的解决方案? 这是一些示例XML: 我想选择类型为的所有子代标签的内容。 PS-我正在尝试使用PHP与Netflix API进行接口-这对我的问题无关紧要,但是如果您想提出一种更好的方法,我非

  • 在使用带有Spring Boot JPA的Hibernate时,我注意到,当试图在扩展Spring的CrudRepository接口的存储库工件中实现更新方法时,必须将要更新的整个实体对象传递给这样的更新方法。只是直觉上,这似乎很浪费,我想知道什么是获得Spring Data/JPA的干净方法,即假设只有那些传入的值需要更新,而不对那些未传入的值进行修改。 这是当前的服务方法,