不在子查询中

问题描述 投票:0回答:1

我正在 leetcode 上练习 SQL,遇到了以下问题 - 我很困惑为什么我的解决方案不起作用。

下面是一张员工表,其中显示了员工所在的部门以及其主要部门。如果一名员工仅属于一个部门 ID,则其主要标志将显示“N”(即使这是他们的主要部门,也是唯一的部门),如果他们有多个部门,则会将“Y”或“N”标记为显示哪一个是主要的。测试用例的数据如下所示

输入:

员工表:

员工_id 部门_id 主要_标志
1 1 N
2 1
2 2 N
3 3 N
4 2 N
4 3
4 4 N

输出:

员工_id 部门_id
1 1
2 1
3 3
4 3

说明:

  • 员工 1 的主要部门是 1。
  • 员工 2 的主要部门是 1。
  • 员工 3 的主要部门是 3。
  • 员工 4 的主要部门是 3。

这是我的解决方案,没有任何返回。为什么这不起作用。预期的输出应该是上面的输出表中的输出,但此查询不返回任何内容。没有空值,当我单独运行子查询时,它显示不应该出现在最终输出中的employee_id、department_ids。所以我想看看为什么这不起作用。

select employee_id, department_id 
from Employee
WHERE (employee_id, department_id) not in(
    select employee_id, department_id 
    from (
        SELECT employee_id, department_id, primary_flag,
            count(employee_id) over (partition by employee_id) as cnt
        from employee
    ) a 
    WHERE cnt > 1 and primary_flag = 'n'
);
sql subquery window-functions
1个回答
0
投票

我将员工和部门合并在一起

CREATE TABLE [Employee] 
(
    [employee_id]   INT,
    [department_id] VARCHAR(512),
    [primary_flag]  VARCHAR(512)
);

INSERT INTO [Employee] ([employee_id], [department_id], [primary_flag]) VALUES
    ('1', '1', 'N'),
    ('2', '1', 'Y'),
    ('2', '2', 'N'),
    ('3', '3', 'N'),
    ('4', '2', 'N'),
    ('4', '3', 'Y'),
    ('4', '4', 'N');

Select * from Employee

select employee_id, department_id 
from Employee
WHERE cast(employee_id as varchar(10)) + '|' + cast(department_id as varchar(10)) not in(
    select cast(employee_id as varchar(10)) + '|' + cast(department_id as varchar(10))  
    from (
        SELECT employee_id, department_id, primary_flag,
            count(employee_id) over (partition by employee_id) as cnt
        from employee
    ) a 
    WHERE cnt > 1 and primary_flag = 'n'
);

小提琴

员工_id 部门_id
1 1
2 1
3 3
4 3
© www.soinside.com 2019 - 2024. All rights reserved.