首页 > 解决方案 > SQL 语句返回 null 时 ID<>SQL 语句不起作用

问题描述

我有两个数据表,一个EmployeeDetails用列Name和调用,一个用列和ID调用。EmployeeProjectProjectIDEmployeeID

现在我想获取所有与项目无关的员工。我尝试将其编写为带有参数的存储过程,@ProjectID以定义我想知道哪个项目,哪些员工没有分配。

我试过这样:

SELECT DISTINCT(Temp.ID), 
    Temp.AssignedDevelopers 
FROM
    (SELECT DISTINCT 
         ED.ID, ED.Name As AssignedDevelopers, P.ProjectID 
     FROM 
         EmployeeDetails ED 
     LEFT JOIN 
         EmployeeProject P on ED.ID = P.EmployeeID) Temp
WHERE 
    ID <> (SELECT EmployeeID 
           FROM EmployeeProject 
           WHERE ProjectID = @ProjectID AND EmployeeID = Temp.ID)

问题是当没有人分配给该项目时,我没有得到结果。

标签: sqlsql-server

解决方案


尝试使用 NOT IN 而不是 <>

SELECT DISTINCT(Temp.ID), Temp.AssignedDevelopers FROM (SELECT DISTINCT ED.ID, ED.Name As AssignedDevelopers, P.ProjectID FROM EmployeeDetails ED  LEFT JOIN EmployeeProject P on ED.ID=P.EmployeeID) Temp WHERE ID NOT IN (SELECT EmployeeID FROM EmployeeProject WHERE ProjectID=@ProjectID AND EmployeeID=Temp.ID)

推荐阅读