【发布时间】:2018-09-18 11:08:19
【问题描述】:
在 MSSQL 中,我有两个具有一对多关系的表。
表格:
tb_Products:
ID
ProductName
tb_Images:
ProductID
MidPath
在存储过程中,显示带有图像的产品(也显示空记录), 如果 tb_Images 中有多个 productID,则显示一条记录。
我可以通过这个查询来完成这项工作:
declare @rowIndexToFetch int
set @rowIndexToFetch=0
select p.ID,p.ProductName,p.CategoryID,c.ParentId,
pi.MidPath
from tb_Products p
join tb_Categories c
on p.CategoryID=c.ID
left outer join tb_Images pi
on pi.ProductID=p.ID
where c.ID=3 or c.ParentId=3
order by pi.ID desc
offset @rowIndexToFetch rows
fetch next 1 rows only
但是,如果我使用 offset 和 fetch,我将无法再从 tb_Images 检索 NULL 记录。左外连接不再起作用。
没有偏移获取的示例记录返回:
ID ProductName CategoryID ParentId MidPath
154 Chef Ceket 33 3 /cdn/www.sample.com/x
154 Chef Ceket 33 3 /cdn/www.sample.com/y
154 Chef Ceket 33 3 /cdn/www.sample.com/z
1 Eldiven 3 3 NULL
使用偏移获取:
ID ProductName CategoryID ParentId MidPath
154 Chef Ceket 33 3 /cdn/www.sample.com/x
预计返回:
ID ProductName CategoryID ParentId MidPath
154 Chef Ceket 33 3 /cdn/www.sample.com/x
1 Eldiven 3 3 NULL
问题是,当我使用 offset-fetch 语句时,我无法检索空记录。我该如何解决这个问题?
【问题讨论】:
-
只获取接下来的 1 行
-
我已经有了。 @Mazhar
-
你是否故意用
fetch next 1将结果限制为1行? -
是的。带有图像的产品。同一类别中每个 productID 的单个记录。 Images 表可以有同一个 productID 的多个 imagePaths,或者没有记录。我将多条记录限制为 1。如果图像表中没有 ProductID 的记录,则将 ImagePaths 显示为 NULL。左外在这样做。但是使用 fetch,不会出现空记录。 @DmitryPolyakov
标签: sql sql-server left-join one-to-many offset