【发布时间】:2013-10-01 09:21:42
【问题描述】:
所以我有一个像这样的表结构的遗留数据库(简化)
Create Table Transaction
{
TransactionId INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
ReplacesTransactionId INT
..
..
}
所以我想创建一个索引视图,以便以下示例仅返回第二个角色(因为它替换了第一个角色)
Insert Into Transaction (TransactionId, ReplacesTransactionId, ..) Values (1,0 ..)
Insert Into Transaction (TransactionId, ReplacesTransactionId, ..) Values (2,1 ..)
有多种方法可以创建此查询,但我想创建一个索引视图,这意味着我不能使用子查询、左连接或例外。可以是一个示例查询(使用 LEFT JOIN)。
SELECT trans1.* FROM Transaction trans1
LEFT JOIN Transaction trans2 on trans1.TransactionId = trans2.ReplacesTransactionId
Where trans2.TransacationId IS NULL
显然,我被数据库的结构所困扰,并希望使用这些数据来提高应用程序的性能。
有什么建议吗?
【问题讨论】:
-
如果您遇到一个合理的查询违反索引视图规则的问题,很可能查询的任何重写都会违反相同的规则或另一个同样糟糕的规则。我无法修复您显示的查询。
标签: sql sql-server tsql views indexed