0

我有三张桌子: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# 代码中传递它。

4

2 回答 2

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
于 2013-09-10T11:36:38.500 回答
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,',')
                      )
于 2013-09-10T11:54:40.710 回答