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/