我在 SQL Server 2008 中有两个表 -
Sales.SalesOrderHeader --> CustomerID(FK, int, not null), OrderDate
(datetime, not null), etc...
Sales.Individual --> CustomerID(PK, FK, int, not null), ContactID
(FK, int, not null), etc...
我必须找到在下订单的最后一天订购东西的客户(即 CustomerID 和相应的 ContactID)。
此查询用于查找最后一个 OrderDate
select MAX(Soh.OrderDate)
from Sales.SalesOrderHeader as Soh
现在,接下来要做的是获取 CustomerID 和 Contact ID。我想到了两种方法 - 仅使用子查询和 where 子句 OR Join 和一个子查询。两种方法如下所示:
--Style1:仅使用子查询
select Si.CustomerID, Si.ContactID
from Sales.Individual as Si
where Si.CustomerID in
(
select Soh.CustomerID
from Sales.SalesOrderHeader as Soh
where Soh.OrderDate =
(
select MAX(Soh.OrderDate)
from Sales.SalesOrderHeader as Soh
)
)
order by Si.CustomerID, Si.ContactID
--样式2:使用内连接
select CustOnLastDay.CustomerID, Si.ContactID
from
(
select Soh.CustomerID, Soh.ContactID
from Sales.SalesOrderHeader as Soh
where Soh.OrderDate =
(
select MAX(Soh.OrderDate)
from Sales.SalesOrderHeader as Soh
)
) as CustOnLastDay
inner join Sales.Individual as Si
on CustOnLastDay.ContactID = Si.ContactID
order by Si.CustomerID, Si.ContactID
问题 -哪个更好,仅子查询或联接(通常和这种情况)?
顺便说一句,我的大多数表的行数都不超过 14-15k。
谢谢。