2

Media と Galleries の 2 つのテーブルがあります。メディアには、ビデオ、写真、ゲームなど、さまざまな種類のバイラル メディアの数千のレコードが含まれています。ギャラリーには、メディア テーブルの画像レコードのグループに関連付けられているギャラリー ID のリストが含まれています。

マイ テーブル

現在、Gallery テーブルから Gallery レコードのリストを返し、Media テーブル内の対応する GalleryIds のグループから MediaThumb を関連付けるクエリがあります。そのクエリは次のとおりです。

SELECT a.GalleryID, a.GalleryTitle, a.GalleryDate, MAX(b.MediaThumb) AS MediaThumb
FROM Galleries a
INNER JOIN Media b
ON a.GalleryID = b.GalleryID
GROUP BY a.GalleryID, a.GalleryTitle, a.GalleryDate
order by a.GalleryID desc

ここで考えたいのは、ギャラリー レコードのリストと、MediaTypeID = 1 または 2 または 3 のメディア テーブルのすべてのレコードを返すクエリです。

私は複雑な SQL があまり得意ではないので、何らかの指示やヘルプを使用できます。私が望むことが可能かどうかさえわかりません。Media テーブルのレコードと絡み合うために、上記の前のクエリが必要です。願わくば、SQL の第一人者が手を貸してくれることを願っています。

どうも!

4

2 に答える 2

4

ギャラリーと最大サムネイルおよび関連するメディア行が必要な場合は、次を使用します。

; WITH CTE AS (
SELECT a.GalleryID GalleryID_A, a.GalleryTitle, a.GalleryDate, b.*,  
ROW_NUMBER() OVER (PARTITION BY  a.GalleryID, a.GalleryTitle, a.GalleryDate 
                    ORDER BY b.MediaThumb DESC) AS Rn
FROM Galleries a
INNER JOIN Media b
ON a.GalleryID = b.GalleryID
Where b.MediaTypeID in (1,2,3)
)
SELECT * FROM CTE where Rn = 1

上記のクエリのサンプルデータと結果 -http://sqlfiddle.com/#!3/ 09e4f /1

チャットでの議論に基づいてクエリを更新しました:

WITH CTE AS (
SELECT a.GalleryID GalleryID_A, a.GalleryTitle, a.GalleryDate, b.*,  
ROW_NUMBER() OVER (PARTITION BY  a.GalleryID, a.GalleryTitle, a.GalleryDate 
                    ORDER BY b.MediaThumb DESC) AS Rn
FROM Media b
INNER JOIN Gallery A
ON a.GalleryID = b.GalleryID
), 
CTE2 AS
(
SELECT a.GalleryID GalleryID_A, a.GalleryTitle, a.GalleryDate, b.*,  
1 Rn
FROM Media b
LEFT OUTER JOIN Gallery A
ON a.GalleryID = b.GalleryID
)
SELECT * FROm CTE where rn = 1
UNION ALL
SELECT * FROM CTE2 WHERE rn = 1 and galleryid is null
order by mediaid

上記のフィドル-http ://sqlfiddle.com/#! 3/72935/12

于 2012-08-24T17:06:54.467 に答える
0

グループ化せずに結合を使用するだけです...左外部結合により、すべてのギャラリーが確実に取得されます...つまり。対応するメディアがないギャラリーもピックアップされます。

SELECT a.*, b.*
FROM Galleries a
Left outer JOIN Media b ON a.GalleryID = b.GalleryID
Where b.MediaTypeID in (1,2,3)
于 2012-08-24T17:06:09.230 に答える