我有三个表:Images
表,Product
表和ProductGallery
表。我的图像表有两列
这样:
ID Path
1 JeffAtwood.jpg
2 GeoffDalgas.jpg
3 Jarrod Dixon.jpg
4 JoelSpolsky.jpg
我的Products
表有两列:
ID Image ID
1 1
2 2
3 3
4 4
我的ProductGallery
有三列
ID ImageID ProductID
1 1 1
2 2 1
3 3 1
4 4 1
5 1 2
6 2 2
7 3 2
8 4 2
我需要创建一个存储过程,为我返回产品列表的所有路径
所以我有一个名为@ids NVARCHAR(MAX)
其中我需要的所有产品ID都有逗号分隔每个值。
所以我有:
@ids = '1' + ','+ '2'+',' ..... and so on
任何人都可以帮我写sql语句为我做的工作吗?
到目前为止,我有这个
Declare @Ids VARCHAR(MAX)
select @Ids = '1';
select P.ID ,I.Path from Images I
left outer join Products P on (I.ID IN(select ImageID from Products where ID in (SELECT Items FROM Split(@Ids,','))))
left outer join ProductGallery PG on (PG.ImageID = I.ID)
WHERE PG.ProductID IN(SELECT Items FROM Split(@Ids,',')) AND P.ID IN
(SELECT Items FROM Split(@Ids,','))
GROUP BY P.ID, I.Path
注意@Ids
参数已经填充了值,我将从我的C#代码中传递它。
答案 0 :(得分:0)
不是要在机器上测试,但你可以尝试
select I.Path from Images I
left outer join Products P on P.ImageID = I.ID
where CHARINDEX(convert(varchar, P.ID), @ids) > 0
答案 1 :(得分:0)
通过查看您的查询,我假设您已经有一个分割分隔字符串的函数。
试试这个(根据评论从产品表中获取图片):
Select p.Id ProductId, i.Path imagePath
From Products p
Join Images i on p.imageId = i.Id
Where p.Id in (
--your Split() function here
SELECT Items FROM dbo.Split(@Ids,',')
)