0

主キーとしてTeam_table列を持つという名前のテーブルがあり、 4 つの異なるテーブルには、、、、これも含まれています。Team_IdTeam_MemberTeam_ProjectTeam_AccountTeam_linkTeam_Id

からチームを削除する前Team_tableに、4 つのテーブルすべてでその参照を確認する必要があります。これTeam_Idがいずれかのテーブルで見つかった場合、ユーザーはそれを削除できません。

次のクエリを作成しましたが、機能していません-

select count(Team.Team_Id)
  from Team 
  join Team_Project on Team.Team_Id = Team_Project.Team_Id  
 right join Team_Member on Team.Team_Id = Team_member.Team_Id  
 right join Team_link on Team.Team_Id = Team_link.Team_Id  
 right join Team_Account on Team.Team_Id = Team_Account.Team_Id  
 where Team.Team_Id = 2

ただし、この team_Id はすべてのテーブルで使用できますが、常に 0 になります。
正しい解決策を教えてください

4

3 に答える 3

1

これを試して:

declare @teamid int=2;

Select Team_Id from Team_Project where Team_Id=@teamid union all
Select Team_Id from Team_Member  where Team_Id=@teamid union all
Select Team_Id from Team_link    where Team_Id=@teamid union all
Select Team_Id from Team_Account where Team_Id=@teamid; 

if @@ROW_COUNT=0 delete from TEAM where Team_Id=@teamid
于 2012-09-17T06:49:43.180 に答える
1

right join最後のテーブルが空になるグループが空になります。left join最初のテーブルが空の場合、グループは空になります。ただし、のグループはfull join一致する行を返します。right joinしたがって、をに置き換えることを検討してくださいfull join

別のオプションとして、この種のクエリのnot exists代わりに句を使用する方が明確です。join

delete  t
from    Team t
where   t.Team_Id = @TeamId
        and not exists (select * from Team_Project where Team_Id = @TeamId)
        and not exists (select * from Team_Member where Team_Id = @TeamId)
        and not exists (select * from Team_link where Team_Id = @TeamId)
        and not exists (select * from Team_Account where Team_Id = @TeamId)

コメントごとに、カウントを取得するには:

select  count(*)
from    (
        select  Team_Id 
        from    Team_Project 
        union all
        select  Team_Id 
        from    Team_Member  
        union all
        select  Team_Id 
        from    Team_link    
        union all
        select  Team_Id 
        from    Team_Account 
        ) as SubQueryAlias
where   Team_Id = @TeamId
于 2012-09-17T06:56:35.233 に答える
0
select count(Team.Team_Id) 
from Team 
left join Team_Project 
   on Team.Team_Id=Team_Project.Team_Id  
left join Team_Member 
   on Team.Team_Id=Team_member.Team_Id  
left join Team_link 
   on Team.Team_Id=Team_link.Team_Id  
left join Team_Account 
   on Team.Team_Id= Team_Account.Team_Id  
where Team.Team_Id=2 and 
(Team_Project.Team_Id is not null
 of 
 Team_member.Team_Id is not null
 or 
 Team_link.Team_Id is not null
 or
 Team_Account.Team_Id is not null)
于 2012-09-17T06:50:08.273 に答える