如何从 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 个不同的值?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server如何查找表名或列名中包含空格的表和列

获取 SQL Server 中包含最大值的行

如何使用 Spring Batch 读取一个单元格中包含多行的 CSV 文件?

SQL Server 索引中包含查询字段 (INCLUDE索引)

SQL Server 2008 查询以查找列中包含非字母数字字符的行

如何在多行 innerHTML 属性的 javascript 中包含 if 语句?