簡體   English   中英

存儲過程中的多重選擇語句

[英]Multiple select statement in stored procedure

我有一個存儲過程必須從多個表中檢索數據

就像是

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,謝謝

如果我正確理解,則需要使用兩個聯接,以便可以在[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]
CREATE PROCEDURE up_getData 
select personId,
       name,
       surname,
       street address,
       Postcode,
FROM Persons p
JOIN Address a on a.PersonId = p.personId

是的,您應該使用聯接:

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 [AppointmentId]
  ,[ContactId]
  ,[Date]
  ,[BookedBy]
  ,[Details]
  ,[Status]
  ,[Time]
  ,[Type]
  ,[JobId]
  ,[AppointmentFor]
  ,b.PersonFirstName UserFirstName
  ,b.PersonLasName UserLastName
  ,c.PersonFirstName ContactFirstName
  ,c.PersonLastName ContactLastName           
 FROM [dbo].[Appointments] a 
JOIN Person b on a.ApointmentFor = b.Person_Id
JOIN Person c on a.ContactId = c.ContactId

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM