SQL Query仅在关联表上返回NULL结果

时间:2017-08-25 14:38:22

标签: sql database

我有3个表(People,ProjectGroupAssoc和Projects),我希望向所有具有特定project_Id的人展示。在中,我希望查询返回person的名称,但在project_id和project_name列中返回NULL。

EDITED 让我们说蒂姆应该被分配一个数据库'项目;但是,他目前在ProjectGroupAssoc表中没有数据库分配。如何查询蒂姆,以及任何其他"人员"谁没有数据库'项目,而不是为每个person返回多行(即只返回那些NULL用于数据库项目的人,而不是返回他们已分配的其他项目?

这是为了确保某些人"已经分配了各自的跟踪和审计项目。这是我的示例数据库/表格/关系。

create table People (
    person_Id int,
    name varchar(255)
);

INSERT INTO People (person_Id, name)
VALUES (0, 'John'), (1, 'Paul'), (2, 'Tim');

create table ProjectGroupAssoc (    
    person_Id int, 
    groupId int
);

INSERT INTO ProjectGroupAssoc (person_Id, groupId)
VALUES (0, 255), (1, 1700), (2, 35), (0, 17), (0, 333), (1, 255)

CREATE TABLE Projects ( 
    proj_Id int, 
    p_name varchar(255)
);

INSERT INTO Projects(proj_Id, p_name)
VALUES (255, 'Database'), (1700, 'Development'), (333, 'Training'), 
(35, 'security'), (17, 'analytics')

select p.person_Id, p.name, pga.groupId, pro.p_name
from People p
left join ProjectGroupAssoc pga on p.person_Id = pga.person_Id
left join Projects pro on pga.groupId = pro.proj_Id    
where pga.groupId = 255;

2 个答案:

答案 0 :(得分:0)

我猜你正在寻找这样的东西。

  select p.Id, p.name, pga.groupId, pro.p_name
  from People p
  left join ProjectGroupAssoc pga on p.Id = pga.Id AND pga.groupId = 255
  left join Projects pro on pga.groupId = pro.Id

答案 1 :(得分:0)

如果您想要显示具有项目ID的人

SELECT p.person_Id
FROM People p
WHERE NOT EXISTS (SELECT 1 FROM ProjectGroupAssoc pga WHERE p.person_Id = pga.person_Id AND pga.groupId = 255)