2011-11-15 24 views
3

私は2つのテーブルPropertyとPropertyImageを持っています。 1プロパティに複数の画像がありますT-SQLの内部結合最初の内部結合の結果

プロパティごとにPropertyImageを1つだけ取得する必要があります。

誰でもその方法を知っていますか?これを行うには

Property: PropertyID, Name 
PropertyImage: PropertyImageID, PropertyID, Source, Type 

おかげ

+1

どのPropertyImage結果が必要ですか?ちょうど任意の1つまたは特定のもの? –

+1

あなたはどんなプロパティイメージをしたいですか?あなたはpropertyimageのテーブル構造を与えることができますか? – xQbert

+0

最初のものは大丈夫です - 基本的には – user441365

答えて

6

ここでは、ID列がID列であり、最後のレコードが必要なものであると仮定して、Propertyからのすべてのレコードが選択され、PropertyImageの最後のレコードが使用される例を示します。正確な列名と要件に基づいて調整する必要があります。

SELECT p.PropertyID, p.Name, pi.PropertyImageID, pi.Source, pi.Type 
    FROM Property p 
     INNER JOIN PropertyImage pi 
     ON pi.PropertyImageId = (SELECT MAX(sub.PropertyImageId) 
            FROM PropertyImage sub 
            WHERE sub.PropertyId = p.PropertyId) 

EDIT:選択

+0

は動作しません - ここではエラーが発生します:WHERE sub.PropertyId = p.PropertyId – user441365

+0

なぜ私はよく分かりません - 私は毎日同じセレクトの多くのバリエーションを使用しています。エラーが出るか結果が得られませんでしたか? – Leons

+0

キーワード「WHERE」の近くの構文が正しくありません。 – user441365

0

一つの方法は、例のデータと所望の出力は、より完全な答えを提供するために役立つだろう

SELECT P.PropertyID, P.Name, max(PI.PropertyImageID) 
from Property P 
INNER JOIN PropertyImage PI 
ON P.PropertyID = PI.PropertyID 
GROUP BY P.PropertyID, P.name 

になります。

+0

PropertyImageからソースとタイプを取得する必要があります – user441365

+0

Leons postを参照してください。それはあなたの後に何を持っています。 – xQbert

2
;WITH PI 
    AS (SELECT *, 
       ROW_NUMBER() OVER (PARTITION BY PropertyID 
             ORDER BY (SELECT 0)) AS RN 
     FROM PropertyImage) 
SELECT P.PropertyID, 
     P.Name, 
     PI.PropertyImageID, 
     PI.Source, 
     PI.Type 
FROM Property P 
     JOIN PI 
     ON P.PropertyID = PI.PropertyID 
WHERE PI.RN = 1 
+0

これはそれです - 素晴らしい仕事 – user441365

0

試しに列名を追加しました - 唯一の最高の 'PropertyImageID' の値でPropertyImageを取得する必要があります

Select Property.PropertyID 
FROM Property 
INNER JOIN PropertyImage pi on pi.PropertyID = Property.PropertyID 
WHERE pi.PropertyImageID = (SELECT MAX(PropertyImageID) FROM PropertyImage WHERE PropertyID = Property.PropertyID) 

。必要に応じてMAX(PropertyImageID)ロジックを変更することができます。