首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我在提出SQL查询时遇到了问题

我在提出SQL查询时遇到了问题
EN

Stack Overflow用户
提问于 2012-08-25 01:01:00
回答 2查看 118关注 0票数 2

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

目前,我有一个查询,它将返回Gallery表中的Gallery记录列表,并在MediaThumb表中关联相应GalleryIds组中的一个媒体。下面是该查询:

代码语言:javascript
运行
复制
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专家中的一些人能帮上忙!

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-25 01:06:54

如果您想要图库和最大缩略图以及相关媒体行,请使用以下内容:

代码语言:javascript
运行
复制
; 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

根据我们在聊天中的讨论更新了查询:

代码语言:javascript
运行
复制
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

票数 4
EN

Stack Overflow用户

发布于 2012-08-25 01:06:09

你只需要使用joins而不需要分组...左外部连接将确保所有的画廊都被选中...即。没有任何对应媒体的画廊也会被挑选出来。

代码语言:javascript
运行
复制
SELECT a.*, b.*
FROM Galleries a
Left outer JOIN Media b ON a.GalleryID = b.GalleryID
Where b.MediaTypeID in (1,2,3)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12113705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档