从表中获取不存在记录的Sql查询
我有4张桌子从表中获取不存在记录的Sql查询,sql,sql-server,join,Sql,Sql Server,Join,我有4张桌子 表1 用户ID(PK)---用户名 1------------------ABC 2-----------------PQR 表2 客户ID(主键)---客户名称 1--------------------客户1 2-----------------Cust2 3--------------------3 表3 客户ID(FK)----用户ID(FK) 1-----------------1 2-----------------2 表4 OfficeId(PK)----Office
表1
用户ID(PK)---用户名
1------------------ABC
2-----------------PQR 表2
客户ID(主键)---客户名称
1--------------------客户1
2-----------------Cust2
3--------------------3 表3
客户ID(FK)----用户ID(FK)
1-----------------1
2-----------------2 表4
OfficeId(PK)----OfficeName--------CustId(Fk)
1-----------------Off1-----------------1
2-----------------Off2-----------------1
3------------------------------------------Off3-----------------2 表5
OfficeId(FK)----用户ID
1------------------1
3------------------2 问题是,当用户与3个客户关联,但他被分配的办公室只属于其中2个客户时,那么它应该返回未分配的officeId吗? 从上表中,
当我将UserId=1传递给存储过程时
我想要以下输出 OfficeId------OfficeName
2---------Off2我不想跟踪哪些表是哪些表,所以我使用的表名(对我来说)更有意义
SELECT OfficeId, OfficeName
FROM Table4
WHERE OfficeId NOT IN (
SELECT Table4.OfficeId
FROM Table3
INNER JOIN Table4
ON Table3.CustId = Table4.CustId
INNER JOIN Tabl5
ON Tabl5.UserId = Tabl3.UserId
AND Tabl5.OfficeId = Table4.OfficeId
);
使用不存在()
使用除之外的(这也将删除重复的结果)
@Kida很乐意帮忙!
select o.OfficeId, o.OfficeName
from users_customers uc
inner join office o
on uc.CustId = o.CustId
where uc.UserId = @UserId
and not exists (
select 1
from users_office uo
where uo.UserId = @UserId
and uo.OfficeId = o.OfficeId
)
select o.OfficeId, o.OfficeName
from users_customers uc
inner join office o
on uc.CustId = o.CustId
where uc.UserId = @UserId
except
select o.OfficeId, o.OfficeName
from users_office uo
inner join office o
on uo.OfficeId = o.OfficeId
where uo.UserId = @UserId