如何从 SQL Server 中包含多行数据的 2 个表中选择 4 个不同的值?
Posted
技术标签:
【中文标题】如何从 SQL Server 中包含多行数据的 2 个表中选择 4 个不同的值?【英文标题】:How can I select 4 distinct values from 2 tables containing many rows of data in SQL Server? 【发布时间】:2012-07-11 19:49:14 【问题描述】:我有 2 个表,我试图从按 GalleryID DESC 排序的 4 个结果中选择。我希望返回的字段是画廊表中的 GalleryID、GalleryTitle、GalleryDate 和媒体表中的 MediaThumb。
现在要注意的是,Media 表有 GalleryID 的 10 的倍数。因此,Media 表中可能有 10 行具有相同的 GalleryID。我所需要的只是一个 MediaThumb 与 galleryid 一起使用。
我不确定如何制定查询以从画廊表中返回 4 个不同的画廊 ID,并从媒体表中返回 MediaThumb。
基本上我想要做的是返回 4 个独特的照片画廊,其中包含来自媒体表的封面照片。
任何帮助将不胜感激。我通过我的 2 个表的 sqlserver 中的查询设计器提供了一个快照。
【问题讨论】:
你试过什么?除了显示关系图之外,您能否显示一些缩写样本数据和所需结果(例如,您想要保留的一些行,以及您想要丢弃的一些行,并将其限制为仅相关的列请)? 你说你想要 4 个不同的画廊记录,以及一个媒体记录,对吗?您选择哪 4 个画廊记录以及每个画廊对应的哪些媒体记录是否重要?您是否只想提取前 4 个画廊记录,并为每个记录提取第一个相应的媒体记录? 列出了一个 linq 标签。这是 TSQL 还是 Linq-to-Sql? 【参考方案1】:这样的?
SELECT TOP 4
g.GalleryID
,g.GalleryTitle
,g.GalleryDate
,MAX(m.MediaThumb) AS MaxMediaThumb
FROM Galleries g
INNER JOIN Media m
ON g.GalleryID = m.GalleryID
GROUP BY g.GalleryID, g.GalleryTitle, g.GalleryDate
【讨论】:
这就是我在对 OP 的评论中所要表达的意思。从他的措辞看来这是他想要的,但需要更好的解释。 @Jim - 我听到了。该答案基于我们从 OP 收到的信息。如果提供更多信息,我们可能会看到更好的解决方案。 凯文,这正是我想要的。非常感谢!【参考方案2】:我的理解
SELECT DISTINCT(g.GalleryID), g.GalleryTitle, g.GalleryDate, MAX(m.MediaThumb)
FROM Galleries g
INNER JOIN Media m
ON g.GalleryID = m.GalleryID
GROUP BY g.GalleryID, g.GalleryTitle, g.GalleryDate
【讨论】:
DISTINCT 与 MAX 和 GROUP BY?您确定这按您认为的方式工作吗? DISTINCT 添加了什么?还有什么可以将结果限制为 4 行?【参考方案3】:如果我理解正确,对于每个 GalleryID,您都需要任何一个 MediaThumb,而您不在乎哪个。如果正确,那么我建议您选择 max(MediaThumb) 和 GROUP BY GalleryID。
【讨论】:
以上是关于如何从 SQL Server 中包含多行数据的 2 个表中选择 4 个不同的值?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Spring Batch 读取一个单元格中包含多行的 CSV 文件?
SQL Server 索引中包含查询字段 (INCLUDE索引)