Sql 存储过程中的多个select语句

Sql 存储过程中的多个select语句,sql,sql-server,Sql,Sql Server,我有一个必须从多个表中检索数据的存储过程 差不多 SELECT [AppointmentId] ,[ContactId] ,[Date] ,[BookedBy] ,[Details] ,[Status] ,[Time] ,[Type] ,[JobId] ,[AppointmentFor] ,(Select PersonFirstName from Person where Person_Id = [AppointmentFor]) As UserFirst

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

差不多

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]
我的问题是 还有其他更有效的方法吗?还是这是正确的方法

我正在使用Sql server 2008
谢谢

是的,您应该使用连接:

SELECT a.[AppointmentId]
  ,a.[ContactId]
  ,a.[Date]
  ,a.[BookedBy]
  ,a.[Details]
  ,a.[Status]
  ,a.[Time]
  ,a.[Type]
  ,a.[JobId]
  ,a.[AppointmentFor]
  ,p.PersonFirstName
  ,p.PersonLastName
  ,p2.PersonFirstName
  ,p2.PersonLastName 
FROM Appointments a
    JOIN Person p ON a.AppointmentFor = p.Person_Id
    JOIN Person p2 ON a.ContactId = p2.Person_Id

是,您应该使用联接:

SELECT a.[AppointmentId]
  ,a.[ContactId]
  ,a.[Date]
  ,a.[BookedBy]
  ,a.[Details]
  ,a.[Status]
  ,a.[Time]
  ,a.[Type]
  ,a.[JobId]
  ,a.[AppointmentFor]
  ,p.PersonFirstName
  ,p.PersonLastName
  ,p2.PersonFirstName
  ,p2.PersonLastName 
FROM Appointments a
    JOIN Person p ON a.AppointmentFor = p.Person_Id
    JOIN Person p2 ON a.ContactId = p2.Person_Id

如果我理解正确,您将需要使用两个联接,以便您可以在[Appointment for]和[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]

如果我理解正确,您将需要使用两个联接,以便您可以在[Appointment for]和[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]

+1、选定的答案还没有投票,我不喜欢这种情况发生在我身上!你可能想读一读这篇关于理解SQL连接的文章:www.devshed.com/c/a/MySQL/Understanding SQL Joins/+1,选择的答案还没有投票,我不喜欢这种情况发生在我身上!您可能想阅读这篇关于理解SQL连接的文章:www.devshed.com/c/a/MySQL/Understanding-SQL-Joins/