【发布时间】:2014-07-05 04:44:03
【问题描述】:
我正在尝试优化此查询以使用联接而不是此子查询,但对于 Top 1,我有点困惑。
SELECT
s.ItemNumber
s.ImportKey
,(
SELECT top 1 MerchandiseGroupID
FROM MerchandiseGroup mg
WHERE s.StoreDepartment = mg.Name AND c.ClientNumber = s.ClientNumber
) as MerchandiseGroupID
FROM dbo.Source s
INNER JOIN dbo.Client c on s.ClientNumber = c.ClientNumber
INNER JOIN dbo.ClientVendor cv on s.Vendor = cv.ClientVendorName
INNER JOIN dbo.TypeClientWarehouse tw on c.WarehouseCode = tw.WarehouseCode
WHERE s.ImportDate > '2014-05-15 01:00:00.000'
到目前为止我所拥有的:
INNER JOIN
(
SELECT
ROW_NUMBER() OVER (PARTITION BY Name ORDER BY MerchandiseGroupID asc) rnum,
MerchandiseGroupID,
Name
FROM MerchandiseGroup mg
) mhg
ON s.StoreDepartment = mg.Name AND c.ClientNumber = s.ClientNumber
WHERE s.ImportDate > '2014-05-15 01:00:00.000' AND mg.rnum = 1
【问题讨论】:
-
无论你采取什么方法,子查询中的 where 子句都会让它运行得更快。
标签: sql join subquery row-number