【问题标题】:Help with simple SQL Server query帮助进行简单的 SQL Server 查询
【发布时间】:2010-05-30 15:17:39
【问题描述】:

我要如下表;

  1. 员工:姓名 nvarchar(50)、职务 nvarchar(50) 和薪水 int。
  2. 雇主:姓名 nvarchar(50),职位 nvarchar(50)

我想从“雇主”表中选择“职位”未显示在“员工”表中的每个项目。

我知道这是一个简单的查询,但它让我很难过。 我会很感激任何帮助。谢谢。

【问题讨论】:

    标签: sql-server sql-server-2008


    【解决方案1】:
    select * from employers 
    where jobtitle not in (select jobtitle 
         from employees
         where jobtitle is not null);
    

    我会考虑为员工和雇主创建一个包含外键的工作表

    编辑 - 感谢所有非空修复

    【讨论】:

    • 如果任何员工的职位为null,则此查询将返回零行。 x not in (null, 'a', ... -> x <> null and x <> 'a' and .. 评估为未知
    • 哇,刚刚测试过,因为我从未遇到过它,这是真的。不过,通过将where jobtitle is not null 添加到子选择中来修复。
    【解决方案2】:

    您可以使用连接:

    select * 
    from employers 
    left join (
        select distinct jobtile
        from employees
    ) emp on employers.jobtitle = emp.jobtitle
    where emp.jobtitle is null
    

    Itchi 的方法更具可读性,但不要忘记子查询末尾的where jobtitle is not null :)

    【讨论】:

    • 除非employees.jobtitle = null,否则不会返回所需的输出。在某处忘记了左连接?
    • 不要在 SQL Server 上这样做,它不够聪明,无法理解它是反连接。
    猜你喜欢
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    相关资源
    最近更新 更多