用于删除不属于的关系的查询

时间:2012-06-20 17:39:57

标签: sql-server-2008 tsql

在SQL Server 2008 R2数据库中,给定此架构:

AgentsAccounts
_______________
AgentID int UNIQUE
AccountID


FinalAgents
___________
AgentID

我需要创建一个执行此操作的查询:对于FinalAgents中的每个AgentID“final”,从AgentsAccounts中删除与“final”具有相同AccountID的所有OTHER AgentID。因此,如果表在查询之前有这些行:

AgentsAccounts
AgentID    AccountID
1          A
2          A
3          B
4          B

FinalAgents
1
3

然后在查询之后,AgentsAccounts表将如下所示:

AgentsAccounts
AgentID    AccountID
1          A
3          B

什么T-SQL查询会在不使用curosr的情况下删除正确的行?

1 个答案:

答案 0 :(得分:2)

Aaron的帖子不太正确,因为当没有最终座席时,它会删除表格中的所有内容。问题非常清楚地表明只应删除具有相同帐户的内容。如果将值“(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;

我使用与Aaron的答案相同的命名约定来澄清差异。看看会发生什么:

INSERT @AgentsAccounts VALUES (1,'A'), (2,'A'), (3,'B'), (4,'B'), (5, 'C');