存储过程中的多个select语句

Gig*_*aPr 1 sql sql-server

我有一个存储过程,必须从多个表中检索数据

就像是

SELECT [AppointmentId]
  ,[ContactId]
  ,[Date]
  ,[BookedBy]
  ,[Details]
  ,[Status]
  ,[Time]
  ,[Type]
  ,[JobId]
  ,[AppointmentFor]
  ,(Select PersonFirstName from Person where Person_Id = [AppointmentFor]) As UserFirstName
  ,(Select PersonLastName from Person where Person_Id = [AppointmentFor]) As UserLastName

  ,(Select PersonFirstName from Person where Person_Id = [ContactId]) As ContactFirstName      
  ,(Select PersonLastName from Person where Person_Id = [ContactId]) As ContactLastName           

 FROM [dbo].[Appointments]
Run Code Online (Sandbox Code Playgroud)

我的问题是还有其他更有效的方法吗?或者这是正确的方法吗?

我正在使用Sql server 2008谢谢

kev*_*ers 5

如果我理解正确,您将需要使用两个连接,以便您可以匹配[AppointmentFor]和[ContactId].

我也把桌子别名,这是一个很好的习惯,当连接到多个桌子时进入.

SELECT a.[AppointmentId] 
  ,a.[ContactId] 
  ,a.[Date] 
  ,a.[BookedBy] 
  ,a.[Details] 
  ,a.[Status] 
  ,a.[Time] 
  ,a.[Type] 
  ,a.[JobId] 
  ,a.[AppointmentFor] 
  ,p1.PersonFirstName As UserFirstName 
  ,p1.PersonLastName As UserLastName 
  ,p2.PersonFirstName As ContactFirstName       
  ,p2.PersonLastName  As ContactLastName            

 FROM [dbo].[Appointments] a

    INNER JOIN Person p1 ON p1.Person_Id = a.[AppointmentFor]

    INNER JOIN Person p2 ON p2.Person_Id = a.[ContactId]
Run Code Online (Sandbox Code Playgroud)