2012-02-28 14 views
2
SELECT collections.title, collections.uniqueID, uploads.uniqueID as thumb 
FROM collections 
INNER JOIN uploads ON collections.uniqueID = uploads.uploadGroup 
WHERE collections.owner = @owner 

この例では、 "uploads"に一致するuniqueid/uploadgroup(コレクション内の3つのアップロードのように)が3行ある場合、これは私に3行戻ってくれます。DISTINCT行のSQL INNER JOIN?

私が探しているのは、それぞれのDISTINCT COLLECTIONSのための1行です.UNIQUEID - これは可能ですか?私は返すようにしたいすべてが

1 | title | uniqueID1 
あるとき、私は現在、

1 | title | uniqueID1 
2 | title | uniqueID2 
3 | title | uniqueID3 

を返すよ

1 | uniqueID1 | idhere 
2 | uniqueID2 | idhere 
3 | uniqueID3 | idhere 

ので

1 | title | idhere 

とアップロードをコレクションしていているとき

+7

なぜ '1 |タイトル|ユニークID1は '1ではない|タイトル| uniqueID3'?そのような決定の基準はどれですか? PS:あなたは 'mysql'か' sql-server'を選択する必要があります。ソリューションはベンダ固有のものになります – zerkms

+0

タイトル別にグループ化するか、上位1行を取得します。それを決める必要があります。 – AndyMcKenna

答えて

3

ここに1つのアプローチ(SQL Serverのみ)です:

SELECT collections.title, collections.uniqueID, uploads.uniqueID as thumb 
FROM collections 
CROSS APPLY (
    SELECT TOP 1 * 
    FROM uploads 
    WHERE collections.uniqueID = uploads.uploadGroup 
    ORDER BY uploads.uniqueID -- not required, can be changed to any column you want 
) uploads 
4

あなたがアップロードテーブルから簡単な明確なリストが必要な場合、あなたはこのようにそれを行うことができます。

SELECT collections.title, collections.uniqueID, uploads.uniqueID as thumb 
FROM collections 
INNER JOIN (SELECT DISTINCT uniqueID FROM uploads) uploads ON collections.uniqueID = uploads.uploadGroup 
WHERE collections.owner = @owner 
2
SELECT collections.title, collections.uniqueID, min(uploads.uniqueID) as thumb 
FROM collections 
JOIN uploads ON collections.uniqueID = uploads.uploadGroup 
WHERE collections.owner = @owner 
GROUP BY collections.title, collections.uniqueID 
+0

+1 - シンプルで、両方で動作します –