如何通过比较两个表来找到0值记录

时间:2017-10-10 11:52:40

标签: sql-server sql-server-2008

问题是 “找到那些不管理任何项目的项目经理,列表名称和ID”

Project manager table and Projects table

第一个表是“PM”,第二个表是“Projects” 怎么写这个查询?我尝试了以下查询,但它没有用。

select a.ID,a.name 
from PM a,Projects b
where a.ID=b.ID
group by a.name
having COUNT(b.ID)=0; 

1 个答案:

答案 0 :(得分:3)

你不能在这里做左联:

SELECT
    a.ID, a.name 
FROM PM a
LEFT JOIN Projects b
    ON a.ID = b.ID
WHERE b.ID IS NULL

但你的桌面结构对我来说并不清楚。让经理ID列在两个表中具有相同的名称是令人困惑的。

此外,您在当前查询中进行了隐式内连接。不是邪恶的,但它肯定会让你更难看出你如何联系这两张桌子。有了明确的左连接,希望很清楚这里发生了什么。那些没有项目的PM中的经理记录因此与没有项目记录匹配。此标记将是(单个)管理器记录,其所有项目列都为空。