我有两个表:媒体和画廊。媒体包含数以千计的不同类型的病毒式媒体的记录,例如视频、图片、游戏。etc...Galleries包含与媒体表中的图片记录组相关联的画廊id的列表。

目前,我有一个查询,它将返回Gallery表中的Gallery记录列表,并在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表中的记录交织在一起。希望你们SQL专家中的一些人能帮上忙!
谢谢!
发布于 2012-08-25 01:06:54
如果您想要图库和最大缩略图以及相关媒体行,请使用以下内容:
; 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-25 01:06:09
你只需要使用joins而不需要分组...左外部连接将确保所有的画廊都被选中...即。没有任何对应媒体的画廊也会被挑选出来。
SELECT a.*, b.*
FROM Galleries a
Left outer JOIN Media b ON a.GalleryID = b.GalleryID
Where b.MediaTypeID in (1,2,3)https://stackoverflow.com/questions/12113705
复制相似问题