1

マスターテーブルにある子テーブルの1つのレコードのストアドプロシージャを作成しようとしています

私は2つのテーブルを持っています。

  • マスター「プロパティ」
  • 子「PropertyImage」

Property1つの画像だけですべての詳細が必要です。

子テーブルでは、1つのプロパティに多くの画像が含まれる場合があります。

Property (propertyId, title)

propertyImage (imageId, FK_propertyId, imageFile)

例えば

property (1, smallbuilding)
property (2, largebuilding)

propertyImage(1, 1, 1.jpg)
propertyImage(2, 1, 2.jpg)
propertyImage(3, 1, 3.jpg)
propertyImage(4, 1, 4.jpg)
propertyImage(5, 2, 7.jpg)
propertyImage(6, 2, 8.jpg)

私の要件は次のとおりです。

MyProperty(propertyId, title, imageFile)
Myproperty(1, smallbuilding, 1.jpg)
Myproperty(2, bigbuilding, 2.jpg)
4

3 に答える 3

2

あなたの質問はあまり明確ではありません。私はあなたが必要なのはすることだと思いますMerge two tables(propery,propertyImage) into a single table (myProperty)。これは1回限りの仕事のように聞こえますが、なぜストアドプロシージャが必要なのでしょうか。次のクエリは仕事をすることができます。ストアドプロシージャの構文が必要な場合は、このMSDNリンクを確認してください。また、新しいMyPropertyテーブルの主キー列が必要であることに注意してください。

INSERT INTO MyProperty (propertyId,title,imageFile)
SELECT propertyId, title, imageFile FROM (
    SELECT p.propertyId,p.title,i.imageFile, 
           RANK() OVER (ORDER BY i.FK_propertyId, i.ImageId) RN
    FROM Property p JOIN propertyImage i 
     ON p.propertyId = i.FK_propertyId
) A
WHERE RN = 1
于 2012-12-17T10:05:32.067 に答える
1

これが必要なようですね

;WITH cte AS
 (
  SELECT ROW_NUMBER() OVER (PARTITION BY propertyId ORDER BY imageId) AS rn,
         propertyId, title, imageFile
  FROM Property p JOIN propertyImage pr ON p.propertyId = pr.FK_propertyId
  )
  SELECT propertyId, title, imageFile
  FROM cte
  WHERE rn = 1
于 2012-12-17T23:48:32.417 に答える
0

one を選択する方法に応じて、propertyImageプロパティごとに 1 つを選択して CTE に結合できます。

WITH FirstImagePerProperty
AS
(
    SELECT FK_propertyId,
           MIN(imageId) As FirstImageId
    FROM PropertyImage
    GROUP BY FK_propertyId
)
SELECT
   p.propertyId,
   p.title,
   i.imageId, 
   i.imageFile
FROM Property p
INNER JOIN FirstImagePerProperty fipp ON p.propertyId=fipp.FK_propertyId
INNER JOIN PropertyImage i ON fipp.FK_propertyId=i.FK_propertyId
于 2012-12-17T10:17:07.120 に答える