从表中获取不存在记录的Sql查询

从表中获取不存在记录的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

我有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)----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