0

SQL Server 2008 R2データベースでは、次のスキーマが与えられます。

AgentsAccounts
_______________
AgentID int UNIQUE
AccountID


FinalAgents
___________
AgentID

これを行うクエリを作成する必要があります。FinalAgentsのAgentID'final'ごとに、'final'と同じAccountIDを持つAgentsAccountsから他のAgentIDをすべて削除します。したがって、クエリの前にテーブルに次の行がある場合:

AgentsAccounts
AgentID    AccountID
1          A
2          A
3          B
4          B

FinalAgents
1
3

クエリ後、AgentsAccountsテーブルは次のようになります。

AgentsAccounts
AgentID    AccountID
1          A
3          B

curosrを使用せずに正しい行を削除するT-SQLクエリはどれですか?

4

1 に答える 1

2

アーロンの投稿は、最終的なエージェントがいない場合にテーブル内のすべてを削除するため、完全には正しくありません。質問は、同じアカウントを持つものだけを削除する必要があることをかなり明確に述べています。これは、エージェントアカウントレコードに値「(5、'C')」を追加するとわかります。

以下は、最終エージェントテーブルによって参照されるアカウントのみの削除を行います。

delete aa
from @AgentsAccounts aa join
     (select fa.AgentID, aa.AccountID
      from @FinalAgents fa join
           @AgentsAccounts aa 
           on fa.agentId = aa.agentId
     ) fa
     on fa.AccountID = aa.AccountID and
        fa.AgentID <> aa.agentID;

違いを明確にするために、アーロンの回答と同じ命名規則を使用しました。何が起こるかを確認してください:

INSERT @AgentsAccounts VALUES (1,'A'), (2,'A'), (3,'B'), (4,'B'), (5, 'C');
于 2012-06-20T18:38:01.863 に答える