0

Imagesテーブル、テーブル、テーブルの3 つのテーブルProductがありProductGalleryます。My Images テーブルには 2 つの列があります

この上:

ID  Path
1   JeffAtwood.jpg
2   GeoffDalgas.jpg    
3   Jarrod Dixon.jpg    
4   JoelSpolsky.jpg    

Productsのテーブルには2つの列があります:

ID  Image ID
1   1
2   2 
3   3    
4   4

ProductGalleryには3つの列があります

 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  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 に答える
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 に答える