create procedure test
as
begin
select * from ProductTBL as ProTBL
left join (select * from PicTBL as PicAll left join (select distinct ProductID_FK from PicTBL as picTblID))as pic
on ProTBL.ProductID = pic.ProductID_FK
where ProTBL.Pro_CatID = 4
end
答案 0 :(得分:0)
首先您的查询与您的表和列名称不匹配。其次,您需要为每个产品定义所需的PicTBL记录(如何定义哪个图像是产品的第一个图像)。我的回答假设第一张图片是ID较低的图片。
可能的查询是:
b
您应该使用视图(物化/索引视图)来备份内部查询并优化性能。
答案 1 :(得分:0)
尝试以下查询:
SELECT picid, prodid, picture from
(
SELECT picid, prodid, picture ,row_number() over (partition by prodid ORDER BY prodid desc) as prod
FROM t_picture
) t_prod_pic
where t_prod_pic.prod=1
它返回图片表中所有产品的第一张图片
答案 2 :(得分:0)
我找到了2个解决方案,第一个将返回一个图像,但不一定是第一个。在另一个解决方案中,您可以选择所需的图像。 第一个解决方案:
SELECT [id]
,[Name]
,[Price]
,Max(pic.imageName)
FROM ProductTBL as ProTBL
left join (select * from PicTBL) pic
on ProTBL.ProductID = pic.ProductID_FK
where ProTBL.Pro_CatID = 4
group by id,Name,price
选择按照pic.name
降序的第一个图像排序的第二个解决方案select * from
(SELECT [id]
,[Name]
,[Price]
,pic.imageName
,ROW_NUMBER() OVER(PARTITION BY id ORDER BY pic.imageName) AS RowNumber
FROM ProductTBL as ProTBL
left join (select * from PicTBL) pic
on ProTBL.ProductID = pic.ProductID_FK
where ProTBL.Pro_CatID = 4
) XX
where RowNumber = 1;
希望你找到这个方便的。