这是我的表:
[Member]:
{ [Id], [UserId], [UserName], [Email], [Status_Id], [MemberType_Id] }
[CustomerProfile] :
{ [Id], [Member_Id], [FirstName], [LastName], [SSN], [Gender], [PostalCode],[City_Id], [Address]}
[DealerProfile]:
{ [Id], [Member_Id], [FirstName], [LastName], [SSN], [Gender], [StoreName], [PostalCode], [City_Id], [Address] }
[ManagerProfile]
{ [Id], [Member_Id], [FirstName], [LastName], [SSN], [Gender] }
[City]:
{ [Id], [Title], [Province_Id] }
所以我需要创建我所有成员和相关列的完整视图。
我必须提到 [Member].[Id] 只是在 3 个配置文件表之一中。这意味着一个会员可以拥有一种类型的客户、经销商或经理
首先,我将从以下选择查询开始:
SELECT
[ME].[Id] AS [MemberId],
[ME].[UserId],
[ME].[UserName],
[ME].[Status_Id],
[ST].[Title] AS [Status],
[ME].[MemberType_Id],
[MT].[Title] AS [MemberType],
CASE
WHEN [MT].[Title]='Customer' THEN [CUP].[FirstName]
WHEN [MT].[Title]='Dealer' THEN [DEP].[FirstName]
WHEN [MT].[Title]='Manager' THEN [MAP].[FirstName]
ELSE 'Unknown' END AS [FirstName],
CASE
WHEN [MT].[Title]='Customer' THEN [CUP].[LastName]
WHEN [MT].[Title]='Dealer' THEN [DEP].[LastName]
WHEN [MT].[Title]='Manager' THEN [MAP].[LastName]
ELSE 'Unknown' END AS [LastName]
FROM [Members].[Member] AS [ME]
INNER JOIN [Members].[MemberType] AS [MT] ON [ME].[MemberType_Id] = [MT].[Id]
INNER JOIN [Members].[Status] AS [ST] ON [ME].[Status_Id]=[ST].[Id]
INNER JOIN [Members].[ManagerProfile] AS [MAP] ON [ME].[Id]= [MAP].[Member_Id]
INNER JOIN [Members].[CustomerProfile] AS [CUP] ON [ME].[Id]=[CUP].[Member_Id]
INNER JOIN [Members].[DealerProfile] AS [DEP] ON [ME].[Id]=[DEP].[Member_Id];
但正如我之前所说,[Member].[ID] 只是在 3 个配置文件表之一中,所以上面的查询返回 null,我认为这样使用Union All
:
(SELECT
[ME].[Id] AS [MemberId],
[ME].[UserId],
[ME].[UserName],
[ME].[Status_Id],
[ST].[Title] AS [Status],
[ME].[MemberType_Id],
[MT].[Title] AS [MemberType],
[PR].[FirstName] AS [FirstName],
[PR].[LastName] AS [LastName]
FROM [Members].[Member] AS [ME]
INNER JOIN [Members].[MemberType] AS [MT] ON [ME].[MemberType_Id] = [MT].[Id]
INNER JOIN [Members].[Status] AS [ST] ON [ME].[Status_Id]=[ST].[Id]
INNER JOIN [Members].[CustomerProfile] AS [PR] ON [ME].[Id]=[PR].[Member_Id])
UNION ALL
(SELECT
[ME].[Id] AS [MemberId],
[ME].[UserId],
[ME].[UserName],
[ME].[Status_Id],
[ST].[Title] AS [Status],
[ME].[MemberType_Id],
[MT].[Title] AS [MemberType],
[PR].[FirstName] AS [FirstName],
[PR].[LastName] AS [LastName]
FROM [Members].[Member] AS [ME]
INNER JOIN [Members].[MemberType] AS [MT] ON [ME].[MemberType_Id] = [MT].[Id]
INNER JOIN [Members].[Status] AS [ST] ON [ME].[Status_Id]=[ST].[Id]
INNER JOIN [Members].[DealerProfile] AS [PR] ON [ME].[Id]=[PR].[Member_Id])
UNION ALL
(SELECT
[ME].[Id] AS [MemberId],
[ME].[UserId],
[ME].[UserName],
[ME].[Status_Id],
[ST].[Title] AS [Status],
[ME].[MemberType_Id],
[MT].[Title] AS [MemberType],
[PR].[FirstName] AS [FirstName],
[PR].[LastName] AS [LastName]
FROM [Members].[Member] AS [ME]
INNER JOIN [Members].[MemberType] AS [MT] ON [ME].[MemberType_Id] = [MT].[Id]
INNER JOIN [Members].[Status] AS [ST] ON [ME].[Status_Id]=[ST].[Id]
INNER JOIN [Members].[ManagerProfile] AS [PR] ON [ME].[Id]=[PR].[Member_Id])
那么您认为,这是创建像我的视图这样的视图的好方法吗?有没有更好的方法来创建性能更好的视图而不是使用Union All
?您对最短路径和最佳性能有何建议?