查询多个表两个是联结表



我正在尝试编写一个sql查询,该查询来自涉及联结表的多个表中的记录。用户配置文件表与角色和团队表有关系,与时区表有一对一关系。

我正在尝试实现一个查询,该查询将从UserProfile表中提取记录以及从角色,团队和时区表中提取相关记录。我试图编写一个查询,但它变得过于复杂。有人可以验证我的查询并告诉我正确的方法

表格如下

用户配置文件表

  [EmployeeID]
  [Forename]
  [Surname]
  [PreferredName]
  [DefaultLanguageCode]
  [DefaultCountryCode]
  [TimeZoneID]
  [Domain]
  [NetworkID]

团队表

   [TeamID]
   [CountryCode]
   [TeamName]
   [TeamDescription]

用户团队链接表

  [UserProfileTeamLinkID]
  [TeamID]
  [UserProfileID]
  [isDefault]
  [isActive]

用户角色表

   [RoleID]
   [RoleDescription]
   [isActive]

用户角色链接表

[UserProfileRoleLinkID]
   [RoleID]
   [UserProfileID]
   [isActive]

时区表

  [TimeZoneID]
  [TimeZoneCode]
  [TimeZone]
  [TimeZoneName] 

查询

select 
    userprofile.[UserProfileID]
   ,userprofile.[EmployeeID]
   ,userprofile.[Forename]
   ,userprofile.[Surname]
   ,userprofile.[PreferredName]
   ,userprofile.[DefaultCountryCode]
   ,userprofile.[DefaultLanguageCode]
   ,userprofile.[TimeZoneID]
   ,userprofile.TeamID
   ,userprofile.TeamName
   ,userprofile.[Domain]
   ,userprofile.[NetworkID]
   ,userprofile.[EmailAddress]
   ,userprofile.[CreatedDate]
   ,userprofile.[CreatedBy]
   ,userprofile.[ModifiedDate]
   ,userprofile.[ModifiedBy]
 from TimeZone tz inner join 
(
select 
   up.[UserProfileID]
   ,up.[EmployeeID]
   ,up.[Forename]
   ,up.[Surname]
   ,up.[PreferredName]
   ,up.[DefaultCountryCode]
   ,up.[DefaultLanguageCode]
   ,up.[TimeZoneID]
   ,te.TeamID
   ,te.TeamName
   ,up.[Domain]
   ,up.[NetworkID]
   ,up.[EmailAddress]
   ,up.[CreatedDate]
   ,up.[CreatedBy]
   ,up.[ModifiedDate]
   ,up.[ModifiedBy]

from [dbo].[UserProfileTeamLink] upt
inner join UserProfile up on up.UserProfileID = upt.UserProfileID
inner join Team te on te.TeamID = upt.TeamID ) userprofile  on tz.TimeZoneID = userprofile.TimeZoneID

不知道数据是什么样子或期望的输出是什么样子,很难说。如果由于这些多对多关系而期望每个用户多行,则可以联接所有表而不使用子查询。

select 
    up.[UserProfileID]
   ,up.[EmployeeID]
   ,up.[Forename]
   ,up.[Surname]
   ,up.[PreferredName]
   ,up.[DefaultCountryCode]
   ,up.[DefaultLanguageCode]
   ,up.[TimeZoneID]
   ,tz.TimeZone
   ,te.TeamID
   ,te.TeamName
   ,up.[Domain]
   ,up.[NetworkID]
   ,up.[EmailAddress]
   ,up.[CreatedDate]
   ,up.[CreatedBy]
   ,up.[ModifiedDate]
   ,up.[ModifiedBy]
   ,ur.RoleDescription
from UserProfile up 
  inner join TimeZone tz 
    on tz.TimeZoneID = up.TimeZoneID
  inner join UserProfileTeamLink upt
    on upt.UserProfileID = upt.UserProfileID
  --and upt.isDefault = 1 /* default team only? */
  --and upt.isActive = 1  /* active team only? */
  inner join Team te 
    on te.TeamID = upt.TeamID
  inner join UserProfileRoleLink upr /* left join if users might not have a role*/
    on up.UserProfileID = upr.UserProfileId
  --and upr.isActive = 1  /* active role only? */
  inner join UserRole ur /* left join if users might not have a role*/
    on upr.RoleId = ur.RoleId

相关内容

  • 没有找到相关文章

最新更新