如何从值列表条件中的联接表中获取数据?

时间:2013-09-10 11:18:44

标签: sql sql-server

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

2 个答案:

答案 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,',')
                      )