我有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;
答案 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)