创建带有自连接的索引视图



我想为任务创建索引视图(在MSSQL 2008 R2上):获取玩家列表,可以控制英雄。

  • 玩家(tblPlayer)有0-N个英雄(tblBattleTarget + tblHero)。
  • 玩家可以在0-N个部落(tblMembershipPlayer2PlayerClan)。
  • 玩家可以与同一部落的其他玩家共享英雄(tblHero。

  • 英雄可以由所有者控制,也可以由其他玩家控制。

我创建了查询:

SELECT
    H.HeroID /*PK of hero*/
    , BT.IDBattleTargetOwner /*ID of owner of hero (player)*/
    , MP2PC_Other.IDPlayer AS IDOtherPlayerByClan /*ID of another player, which can control hero*/
FROM [dbo].[tblPlayer] AS P_Owner /*owner of heroes*/
INNER JOIN [dbo].[tblBattleTarget] AS BT /*"base class" for hero*/
    ON BT.IDBattleTargetOwner = P_Owner.PlayerID
INNER JOIN [dbo].[tblHero] AS H /*hero in game*/
    ON H.HeroID = BT.BattleTargetID
INNER JOIN [dbo].[tblMembershipPlayer2PlayerClan] AS MP2PC_Owner /*hero's owner can be in 0-N clans*/
    ON MP2PC_Owner.IDPlayer = BT.IDBattleTargetOwner
INNER JOIN [dbo].[tblMembershipPlayer2PlayerClan] AS MP2PC_Other /*other players can be in 0-N clans*/
    ON MP2PC_Other.IDPlayerClan = MP2PC_Owner.IDPlayerClan
WHERE H.Sharing = [dbo].[CONST_Sharing_PlayerClan]() /*only heroes shared with clan can be in result*/

然而,当我试图在视图上创建索引时,我得到错误:无法在视图"mydatabase.dbo.vwHero_SharingWithClan"上创建索引。视图包含一个关于"mydatabase. dbbo . tblmembershipplayer2playerclan"的自连接。(Microsoft SQL Server, Error: 1947)

我搜索了网页&sql server在线书籍,我没有找到如何解决自连接问题的方法。有什么办法可以做到吗?或者我应该如何重写查询以获得正确的结果?

谢谢!

您不能在索引视图中使用自连接—这是不可能的(我猜自连接使更新索引过于复杂而无法正确执行)。

请参阅此链接创建索引视图与自连接(有点)的一些提示,如何能够重新构建您的查询,以解决这个问题。

最新更新