SQL Server 使用 OUTER APPLY 实现查询产品的多张图片,返回结果为一条记录(而非多条)
效果示例:
ProductId | ImageUrl | ImageUrl2 | ImageUrl3 |
---|---|---|---|
1 | http://test.cn/flower1.png | http://test.cn/flower2.png | http://test.cn/flower3.png |
2 | http://test.cn/chair1.png | http://test.cn/chair2.png | http://test.cn/chair3.png |
SQL 语句如下
SELECT p.ProductId, img1.ImageUrl, img2.ImageUrl, img3.ImageUrl
FROM dbo.Product p
OUTER APPLY (
SELECT TOP 1 ImageUrl
FROM (
SELECT ROW_Number() OVER (ORDER BY img.ImageUrl) AS sq, img.ImageUrl as ImageUrl
FROM dbo.[Image] img
WHERE img.ProductId = p.ProductId
) AS imgs
WHERE imgs.sq = 1
) AS img1
OUTER APPLY (
SELECT TOP 1 ImageUrl
FROM (
SELECT ROW_Number() OVER (ORDER BY img.ImageUrl) AS sq, img.ImageUrl as ImageUrl
FROM dbo.[Image] img
WHERE img.ProductId = p.ProductId
) AS imgs
WHERE imgs.sq = 2
) AS img2
OUTER APPLY (
SELECT TOP 1 ImageUrl
FROM (
SELECT ROW_Number() OVER (ORDER BY img.ImageUrl) AS sq, img.ImageUrl as ImageUrl
FROM dbo.[Image] img
WHERE img.ProductId = p.ProductId
) AS imgs
WHERE imgs.sq = 3
) AS img3
```