2017-09-28 3 views
1

g.house_IDをDistinctとして選択しようとしています。下のクエリで返される値はg.house_idに基づいて一意になります。Distinct SQL

ハウスIDに値1のレコードが3つある場合、ハウスIDの1番目のエントリだけが返され、3行は返されません。

SELECT r.*, g.* 
FROM house r, pic_gallery g 
WHERE r.house_id = 1 AND r.house_id = g.house_id 
+0

ようこそ。あなたの質問は何ですか? –

+0

私には明らかです。 – w0051977

+0

サンプルテーブルのデータと期待される結果を書式付きテキスト(イメージではなく)として追加します。 – jarlh

答えて

0

あなたが(たとえば、単一の列をフェッチ)あなたのギャラリーから1枚の画像を表示したい場合は、単純な副選択は、あなたの場合は

SELECT 
    r.* 
    , (SELECT TOP(1) PrimaryImage 
    FROM pic_gallery g 
    WHERE r.house_id = 1 AND r.house_id = g.house_id 
    ) 
FROM house r 

をお手伝いをします、あなたが参加したいように思えますギャラリーテーブルの行データ全体サブテーブルの行を1つだけ選択する場合は、データベースがどの行が正しいかを知るために何らかの方法で並べ替える必要があります。

SELECT R.* 
FROM house R 
OUTER APPLY (
    SELECT TOP 1 G.ID,G.Image,G.Owner,G.HouseID 
    FROM gallery G 
    WHERE G.HouseID = R.HouseID 
    ORDER BY G.CreatedDate 
) O 

また、パーティションをオーバービューすると便利です。

個人的に私はギャラリー行の1つをプライマリとしてマークし、このような単純な結合を使用します。

SELECT * From house R 
LEFT OUTER JOIN gallery G ON R.HouseID = G.HouseID 
WHERE G.PrimaryRow = 1 
0

別名で左結合を試してください。

SELECT DISTINCT g.house_id, r.*, g.* 
FROM pic_gallery g 
LEFT JOIN house r, 
ON r.house_id = g.house_id 
WHERE r.house_id = 1