2012-08-24 39 views
2

我有2個表格:媒體和畫廊。媒體包含數千種不同類型病毒媒體的記錄,如視頻,圖片,遊戲等等...畫廊包含與媒體表中的圖片記錄組相關聯的圖庫ID列表。我有麻煩提出一個SQL查詢

My Tables

目前,我有一個查詢,將從庫表中返回的畫廊記錄列表和MediaThumb從媒體表GalleryIds的對應組相關聯。下面是該查詢:

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表中的記錄交織在一起。希望你們中的一些人能夠伸出援助之手!

Thx!

回答

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 

fi ddle for above- http://sqlfiddle.com/#!3/72935/12

+0

我不得不放棄我的答案,因爲你已經發布CTE :) –

+0

但是,它不會給每個圖庫只有一個記錄...不是看着所有的記錄.. 。抱歉,我有點困惑...它已經很長時間以來,我寫了一個SQL –

+0

不,它會給所有記錄與'a.GalleryID,a.GalleryTitle,a.GalleryDate'分組的max media thumb值。「 –

0

你只需要使用連接而不需要分組......左外部連接將確保所有的圖庫被拾取...即。沒有任何相應媒體的Gallaries也會被拿起。

SELECT a.*, b.* 
FROM Galleries a 
Left outer JOIN Media b ON a.GalleryID = b.GalleryID 
Where b.MediaTypeID in (1,2,3)