什么是“自我加入”正确和完整的定义?据我所知,自我加入就像...FROM Role r1 INNER JOIN Role r2 ON r1.ID = r2.ParenteRoleId
但是在这段代码中“自联接”的位置: http://sqlfiddle.com/#!6/e7d058/1
CREATE TABLE dbo.Classifier
(
ID int IDENTITY(1,1) NOT NULL,
Name nvarchar(128) NOT NULL
)
GO
CREATE TABLE dbo.Data
(
ID int IDENTITY(1,1) NOT NULL,
ClassifierID1 int NOT NULL,
ClassifierID2 int NOT NULL
)
GO
CREATE VIEW dbo.DataEx WITH SCHEMABINDING AS
SELECT d.ID, c1.Name as ClassifierName1, c2.Name as ClassifierName2
FROM dbo.Data d
INNER JOIN dbo.Classifier c1 ON d.ClassifierID1=c1.ID
INNER JOIN dbo.Classifier c2 ON d.ClassifierID2=c2.ID
GO
SET ARITHABORT ON
SET CONCAT_NULL_YIELDS_NULL ON
SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET NUMERIC_ROUNDABORT OFF
CREATE UNIQUE CLUSTERED INDEX [dbo$DataEx$PK] ON dbo.DataEx
(
[ID]
)
GO
此代码抛出错误:
Cannot create index on view "testdb.dbo.DataEx". The view contains a self join on "testdb.dbo.Classifier".
我也尝试使用FROM dbo.Data d, dbo.Classifier c1, dbo.Classifier c2 WHERE d.ClassifierID1=c1.ID AND d.ClassifierID2=c2.ID
来避免此错误,但这没有用。
据我所知,我不能在索引视图中两次使用同一个表,我也无法做任何事情,但至少我可以学习一些术语..
答案 0 :(得分:1)
自连接只是一个连接,它产生的结果集多次包含同一个表。
用于引入表的每个实例的特定连接条件是否提及同一个表的其他实例并不重要。
(对于元问题,坏消息是,如果你现在遇到这个问题,那么你的观点的查询不太可能重新制定,以便它可以编入索引)
答案 1 :(得分:0)