如何从 SQL Server 中的 TOP 中排除 LEFT JOINed 表?

2024-02-13

假设我有两个书籍表和两个对应版本的表。

我有一个查询如下:

SELECT TOP 10 * FROM
(SELECT hbID, hbTitle, hbPublisherID, hbPublishDate, hbedID, hbedDate
 FROM hardback
 LEFT JOIN hardbackEdition on hbID = hbedID
 UNION 
 SELECT pbID, pbTitle, pbPublisher, pbPublishDate, pbedID, pbedDate
 FROM paperback
 Left JOIN paperbackEdition on pbID = pbedID
) books
WHERE hbPublisherID = 7
ORDER BY hbPublishDate DESC

如果前两本精装书和/或平装书有 5 个版本,则此查询仅返回两本书。但是,我想要TOP 10仅适用于返回的实际图书记录数。有没有一种方法可以让我选择 10 本书,同时仍然获得所有相关的版本记录?

如果相关的话,我没有创建和删除临时表的数据库权限。

谢谢阅读!

Update

澄清一下:平装本表有一个相关的平装本版本表。精装本表有一个相关的精装本版本表。精装本和平装本表格彼此不相关,除非用户(希望如此!)看到它们一起显示。


如果我没理解错的话,你可以通过以下方式获得这 10 本书及其所有相关版本

  • Using a WITH返回初始完整结果集的语句
  • 使用a选择10本不同的书GROUP BY
  • JOIN结果该小组保留了给定 10 本书中的所有信息。

SQL语句

;WITH books AS (
  SELECT  hbID, hbTitle, hbPublisherID, hbPublishDate, hbedID, hbedDate
  FROM    hardback
          LEFT JOIN hardbackEdition on hbID = hbedID
  WHERE   hbPublisherID = 7          
  UNION ALL
  SELECT  pbID, pbTitle, pbPublisher, pbPublishDate, pbedID, pbedDate
  FROM    paperback
          LEFT JOIN paperbackEdition on pbID = pbedID
  WHERE   hbPublisherID = 7
)
SELECT  *
FROM    books b
        INNER JOIN (
          SELECT TOP 10 hbID
          FROM   books
          GROUP BY
                hbID
        ) bt ON bt.hbID = b.hbID

或者如果您希望只编写一次 where 子句

;WITH books AS (
  SELECT  hbID, hbTitle, hbPublisherID, hbPublishDate, hbedID, hbedDate
  FROM    hardback
          LEFT JOIN hardbackEdition on hbID = hbedID
  UNION ALL
  SELECT  pbID, pbTitle, pbPublisher, pbPublishDate, pbedID, pbedDate
  FROM    paperback
          LEFT JOIN paperbackEdition on pbID = pbedID
)
, q AS (
  SELECT  *
  FROM    books
  WHERE   hbPublisherID = 7          
)
SELECT  *
FROM    q b
        INNER JOIN (
          SELECT TOP 10 hbID
          FROM   q
          GROUP BY
                hbID
        ) bt ON bt.hbID = b.hbID
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 SQL Server 中的 TOP 中排除 LEFT JOINed 表? 的相关文章

  • SQL最近的命令?微软SQL

    我只是编写一个查询来查看我的客户数据库并列出他们下了多少订单等 我正在努力添加到此查询中的是只显示该电子邮件的最新 OrderID 有任何想法吗 这是我的查询 select top 1000 BuyerEMail COUNT HowMany
  • SQL Server 为什么索引不与 OR 一起使用

    我一直在研究索引并试图了解它们是如何工作的以及如何使用它们来提高性能 但我错过了一些东西 我有下表 Person Id Name Email Phone 1 John E1 P1 2 Max E2 P2 我正在尝试找到对列进行索引的最佳方法
  • INSERT 失败,因为以下 SET 选项设置不正确:“QUOTED_IDENTIFIER”

    在执行存储过程时 我们有时会收到以下消息 之后无需任何更改 删除并重新执行存储过程 它就可以正常工作 DBCORE INSERT 失败 因为以下 SET 选项设置不正确 QUOTED IDENTIFIER 验证 SET 选项是否正确用于索引
  • 从另一个表中选择范围之间的记录

    我有两张桌子 比如说Table1 and Table2 Table1 ID RN 11 1 12 2 13 3 14 4 15 5 16 6 17 7 18 8 19 9 10 10 Table2 ID FromRN ToRN 1 1 3
  • 将语句插入 SQL Server 数据库

    最近几天我试图找到这个错误 但没有成功 我正在尝试在数据库中插入一个新行 一切都很顺利 没有错误 也没有程序崩溃 My INSERT声明如下 INSERT INTO Polozaj Znesek Uporabnik Cas Kupec Po
  • 如何返回调用不同数据库中的存储过程的远程数据库名称?

    我在一个 SQL Server 2008 R2 上有许多不同的数据库 为了便于论证 我们将它们称为 DB A DB B 和 DB C 我被要求开发一个将存在于 DB A 上的存储过程 该存储过程将用于删除和创建索引 并在 DB A 的表中存
  • SQL Server 内部级联更新/删除如何工作?

    好吧 我相信这个问题还不清楚 这里我用另一种方式重写它 假设我创建两个表 table1 c1 int PRIMARY KEY table2 table1c11 int 之间存在关系table1 and table2 i e table1 c
  • 无法找到请求的.Net Framework 数据提供程序。 (Sql客户端)

    我正在尝试使用来自 SQL Server 2005 的 DB First 迁移来设置一个简单的 ASP NET MVC 4 Web 应用程序 我已经在数据库中创建了表 并使用实体框架在代码中创建了对象 我可以使用这些对象访问数据 当我尝试使
  • 使用实用程序批量复制将所有表从 SQL Server 数据库导出到文件中

    我想将数据库中的所有表 bcp 到文件中 SELECT EXEC xp cmdshell bcp bcp QUOTENAME DB NAME database name QUOTENAME SCHEMA NAME SCHEMA ID sch
  • 关于数据库变更的通知

    我正在尝试一种场景 其中我想使用任何用户提交的更改来更新在不同 PC 上运行的桌面 UI 例如 Application1 安装在 PC1 PC2 和 PC3 上 假设所有 PC 都运行此应用程序 假设 PC1 上的用户 1 更改数据并提交到
  • T-SQL:检查电子邮件格式

    我有这样的场景 我需要物理数据库中的数据完整性 例如 我有一个变量 email address VARCHAR 200 我想检查一下值是否为 email address是电子邮件格式 有人知道如何检查 T SQL 中的格式吗 非常感谢 我使
  • 使用递归 CTE 遍历父/子树?

    我被 cte 困住了 我想要一个查询 其中第一个父级为空 上一个父级的子级将成为下一个父级的父级 依此类推 WITH RESULT PARENT CHILD TNAME LEVEL AS anchor SELECT E PARENT GEN
  • 批量插入固定宽度字段

    如何使用批量插入命令指定字段长度 示例 如果我有一个名为 c Temp TableA txt 的表 并且它具有 123ABC 456DEF 我有一张桌子 例如 use tempdb CREATE TABLE TABLEA Field1 ch
  • SQL Server 2012 中带有“AND”运算符的“LIKE”子句

    我的要求与该线程完全相同 如何在 SQL Server 中使用 JOIN LIKE 和 AND 运算符 https stackoverflow com questions 39745766 how to use join like with
  • 使用触发器找出哪些行被插入、更新或删除

    我在数据库中有一个名为指示的表 它有三列Name Age and Enable 我想创建一个触发器 每当Age未满 18 岁并且Enable是真的 我想在插入的那一刻检查指示表上的记录 这样我就可以检查是否应该在报警时插入 I found
  • 管理员无法管理 SQL Server 报告服务

    我正在 SQL Server 2008 Standard 上运行 SQL Server Reporting Services 并尝试使网页正常工作 我需要做什么才能获得 RS 报表管理器 报表服务连接 首先将我视为管理员 以便我可以更改我的
  • SQL Server 中带条件的多个计数函数

    我想合并 SQL Server 中的一些表 我想要获得的是如下图所示的东西 假设我有 tes A tes B tes C 和 tes jumlah 表 tes jumlah 是 tes A tes B 和 tes C 表的组合 请注意 ju
  • 使用 min(datetime) 了解 SQL Server 行为

    长话短说 这只是我的一个愚蠢的假设 我确信一个专栏是一个日期时间 但它不是 所以不要指望在这个问题中找到任何有趣的东西 把它留在这里 以便民主党得到他的正确接受回答 我写了一个像这样的简单查询 SELECT ID MIN DateMadeA
  • SQL Server 2008 R2 中的字符映射/逐字符搜索和替换

    我在 SQL Server 2008 R2 上运行 我们在这里有一个要求 即我需要创建将某些英文字符替换为以前在遗留系统中使用的区域设置语言字符 为此 我可能会使用 T SQL 中的替换函数 但在我的实践中 我们会逐个字符地替换 例如 AS
  • 如何导入文本文件并将数据保存到数据库中? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有这个项目 导入一个 txt file 连接到 SQL Server 数据库 将所有数据传输到数据库 文本文件按制表符分为四个字段

随机推荐

  • WPF 在 CaptureMouse() 之后不发送 MouseMove 事件;

    我正在尝试使用带有圆角矩形的 WPF 画布 我可以使用鼠标在其上拖动圆形 但是 一旦我尝试捕获画布上的鼠标 我就不再收到移动事件 这是一个 mycanvas 用户控件 矩形是 foo 用户控件 这些的 XAML 减去序言 是 mycanva
  • 如何在没有 eval 的情况下本地化许多遗留全局变量?

    我问这个问题是因为我终于解决了一个问题 我一直在尝试在许多情况下寻找解决方法 我认为这非常简洁 所以我正在对此进行问答 看看我是否可以使用eval 我会这样做 eval join n map my v valcashe sprintf Te
  • 如何使Qt主窗体在屏幕上居中?

    我已经在主窗体的构造函数中尝试过这些 QRect desktopRect QApplication desktop gt availableGeometry this move desktopRect center frameGeometr
  • 登录表单上的 ssl?

    我的网站上有 SSL 当用户从 http 页面登录时 表单操作会发送到 https 页面 这仍然会保护发布的数据吗 或者将表单和页面发布到 SSL 会更好吗 Thanks It is对于带有表单的页面和正在提交的页面都是绝对必要的to为 H
  • ActiveAdmin:批量选择所有页面

    使用 activeadmin 是否可以对特定模型的所有记录执行批处理操作 而不是仅在当前页面上选择的记录 默认批处理操作仅对当前页面中的选择进行操作 您必须定义自己的批处理操作 该操作仅忽略选择并对所有记录执行操作 See http act
  • 为什么在检查依赖关系时使用 GemSpec + GemFile?

    每当开发 gems 时 我看不出有任何理由不直接检查 Gemfile 的依赖关系 确实 为什么要使用 gemspec文件以便列出它们 有真正的好处吗 嗯 那是因为Gemfile不是来自 Rubygems 的文件 而是来自 Bundler 的
  • 制作一个独立的列表(?)

    我正在尝试列表并尝试显示以下代码段 hello 但要做到这一点 我需要让 3 个 listSmall 彼此独立 有没有办法做到这一点 当前输出当然是 hello hello hello listSmall listBig listSmall
  • 在保存付款方式之前如何获取报价总额?

    我正在尝试创建一步结帐 但在结帐页面中我遇到了订单审核部分的问题 当我选择付款方式时 例如 货到付款 有 5 美元的额外费用 或者 checkorder 有 4 的折扣 或者 信用卡付款 会在订单总额中增加额外费用 我需要一种在保存付款方式
  • 将 AnyGenerator 与 Swift 2.2+ 一起使用(自定义类的“for in”循环支持)

    以前我使用以下函数使我的自定义类符合 SequenceType 协议 func generate gt AnyGenerator
  • 我想从 MySQL 数据库中随机选择一个 YouTube 视频,并将其显示在我的网页上 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个名为 Videos 的 My
  • Bootstrap 4 导航栏将徽标中心对齐并在左侧切换图标

    我想让徽标居中 链接位于导航栏的左侧 当它们在小型设备中折叠时 切换按钮应出现在左侧 此处出现在右侧 并且徽标应固定 不折叠
  • JNI 对象指针

    Problem 在尝试 JNI 接口时 我想知道是否可以采取JObject并将其转换为等效的结构来操作字段 然而 当我尝试时 我惊讶地发现这不起作用 忽略这个想法可能有多么可怕 为什么它不起作用呢 我的方法 Java测试类 我做了一个简单的
  • 向 ggplot2 添加小刻度和标签

    必须有一种更简单的方法来使用 ggplot2 在图中添加自定义刻度和标签 而不是像论坛中的一些答案那样创建自定义函数 这是我的代码 data lt data frame WS Spd WVT c 0 5 1 2 4 2 0 3 C E c
  • python如何比较字符串和整数[重复]

    这个问题在这里已经有答案了 在下面的代码中 这是一个用于对元素进行排序的简单算法 我的问题是如何在内部比较字符串以及解释器如何知道这些字符串将放置在整数之后 a 22 66 54 11 16 2 5 b a 3 2 1 gt gt gt f
  • 如何在kafka中初始化kafka ConsumerRecords进行测试

    我正在为 kafka 消费者组件和模拟编写测试用例kafkaConsumer poll 它返回的实例ConsumerRecords
  • 设置 md-grid-list 样式

    我正在使用 Angular Material 网格列表来显示大约 500 1000 个项目 我在根据自己的喜好设计它时遇到了一些麻烦 这是网格列表现在的样子
  • Cassandra中删除表或截断表哪个更好

    我们有一个用例 我们需要每天使用 Cassandra 中的当前数据重新创建一个表 为此 我们应该使用 drop table 还是 truncate table 哪个会更有效率 我们不希望数据被备份等 谢谢 安库尔 我认为对于几乎所有情况 截
  • Windows 8 Phone 客户端证书 HTTPS 身份验证

    我正在尝试使用我正在开发的 Windows 8 Phone 应用程序中的客户端证书访问安全的 HTTPS 服务器 这根本不起作用 这让我尝试从标准 Web 浏览器访问 HTTPS 服务器 但它也不起作用 我不知道 Internet Expl
  • 从 SonarQube 删除项目

    有谁知道如何从 SonarQube 服务器删除项目 谢谢 罗南 您有 2 种方法可以删除项目 如果您是项目的管理员 则可以从其配置操作中将其删除 gt 参见 项目管理 文档页面中的 删除项目 https docs sonarqube org
  • 如何从 SQL Server 中的 TOP 中排除 LEFT JOINed 表?

    假设我有两个书籍表和两个对应版本的表 我有一个查询如下 SELECT TOP 10 FROM SELECT hbID hbTitle hbPublisherID hbPublishDate hbedID hbedDate FROM hard