相关子查询中的 MySQL LIMIT

2023-12-13

我有一个相关子查询,它将返回数量列表,但我需要最高数量,而且只需要最高数量。因此,我尝试引入 order by 和 LIMIT 1 来实现此目的,但 MySQL 抛出一个错误,指出它还不支持子查询中的限制。关于如何解决这个问题有什么想法吗?

SELECT Product.Name, ProductOption.Name, a.Qty, a.Price, SheetSize.UpgradeCost,
        FinishType.Name, FinishOption.Name, FinishTierPrice.Qty, FinishTierPrice.Price
FROM `Product`
    JOIN `ProductOption`
        ON Product.idProduct = ProductOption.Product_idProduct
    JOIN `ProductOptionTier` AS a
        ON a.ProductOption_idProductOption = ProductOption.idProductOption
    JOIN `PaperSize`
        ON PaperSize.idPaperSize = ProductOption.PaperSize_idPaperSize
    JOIN `SheetSize`
        ON SheetSize.PaperSize_idPaperSize = PaperSize.idPaperSize
    JOIN `FinishOption`
        ON FinishOption.Product_idProduct = Product.idProduct
    JOIN `FinishType`
        ON FinishType.idFinishType = FinishOption.Finishtype_idFinishType
    JOIN `FinishTierPrice`
        ON FinishTierPrice.FinishOption_idFinishOption = FinishOption.idFinishOption
WHERE Product.idProduct = 1
    AND FinishTierPrice.idFinishTierPrice IN (SELECT FinishTierPrice.idFinishTierPrice
                                              FROM `FinishTierPrice` 
                                              WHERE FinishTierPrice.Qty <= a.Qty
                                              ORDER BY a.Qty DESC
                                              LIMIT 1)

这是一个变体greatest-n-per-group经常出现的问题。

您需要单行形式 FinishTierPrice (将其称为p1),匹配 FinishOption 并具有最大数量,但仍小于或等于 ProductOptionTier 的数量。

一种方法是尝试匹配第二行(p2)来自 FinishTierPrice,它将具有相同的 FinishOption 和更大的数量。如果不存在这样的行(使用外连接并测试它是否为 NULL),则通过p1是最伟大的。

SELECT Product.Name, ProductOption.Name, a.Qty, a.Price, SheetSize.UpgradeCost,
        FinishType.Name, FinishOption.Name, FinishTierPrice.Qty, FinishTierPrice.Price
FROM `Product`
    JOIN `ProductOption`
        ON Product.idProduct = ProductOption.Product_idProduct
    JOIN `ProductOptionTier` AS a
        ON a.ProductOption_idProductOption = ProductOption.idProductOption
    JOIN `PaperSize`
        ON PaperSize.idPaperSize = ProductOption.PaperSize_idPaperSize
    JOIN `SheetSize`
        ON SheetSize.PaperSize_idPaperSize = PaperSize.idPaperSize
    JOIN `FinishOption`
        ON FinishOption.Product_idProduct = Product.idProduct
    JOIN `FinishType`
        ON FinishType.idFinishType = FinishOption.Finishtype_idFinishType
    JOIN `FinishTierPrice` AS p1
        ON p1.FinishOption_idFinishOption = FinishOption.idFinishOption
        AND p1.Qty <= a.Qty
    LEFT OUTER JOIN `FinishTierPrice` AS p2
        ON p2.FinishOption_idFinishOption = FinishOption.idFinishOption
        AND p2.Qty <= a.Qty AND (p2.Qty > p1.Qty OR p2.Qty = p1.Qty 
            AND p2.idFinishTierPrice > p1.idFinishTierPrice)
WHERE Product.idProduct = 1
    AND p2.idFinishTierPrice IS NULL
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

相关子查询中的 MySQL LIMIT 的相关文章

随机推荐

  • 以编程方式设置 CKEditor 对话框的位置

    我正在尝试找到一种方法 以便在打开新对话框时以编程方式设置 CKEditor 对话框的位置 位置部分的实际设置似乎很简单 但我似乎无法弄清楚如何捕获正在创建和显示的新 CKEditor 对话框的事件 我假设这将是类似的事情 CKEDITOR
  • 在 haskell 中按所选字符分割字符串

    我试图在每次选择字符时分割一个字符串 所以如果我收到 1 2 3 4 5 我选择的角色是 结果是一个列表 例如 1 2 3 4 5 我一直在浏览这里已经回答的问题 他们指出我使用splitOn 然而 当我尝试import Data List
  • 仅当用户选择时才使用 Inno Setup 下载文件

    问题 我想知道如何编写脚本来下载第二个 zip 文件 但最初在两个 zip 文件之间进行选择 下载 解压并删除 zip 文件 每个 zip 文件具有不同的名称 但内容与 zip 文件具有不同的名称 每个名称相同 无需重命名 这个问题有点类似
  • 由于内存限制,串行json_decode

    我有一个很大的 json 文件 7 3MB 我尝试对其进行 json decode 但由于内存限制而失败 致命错误 允许的内存大小 134217728 字节耗尽 有没有一种方法可以一次使用一个对象 节点串行解码 json 文件 我想理论上你
  • “no-ansi”选项不存在

    我正在尝试在 Windows 上创建 laravel 项目 但这个问题向我展示并且我尝试更新作曲家 php版本是8 0 6 作曲家版本是2 0 14 laravel 版本是 4 2 5 根据对此的评论Github问题这是最新版本的 Symf
  • 检查所选文件是否与 标记上的接受属性匹配

    我希望防止用户上传服务器会从包含最少 JavaScript 的页面拒绝的文件 最好不要添加任何严重的依赖项 例如纯粹为了解决这一问题的 jQuery 由于我不是针对旧用户 因此我使用浏览器的表单验证系统来检查用户是否选择了有效文件 但它似乎
  • PhoneGap (Cordova.js) 和 JQuery.Ajax 不能一起工作

    我已经使用 Phonegap Jquery 构建了一个针对 Andriod 4 12 的 html 页面 我的业务需求是使用 cordova js 的相机 API 拍照 然后将捕获的图片发布到 ASMX Web 服务 问题 当我添加对 Co
  • 半透明物体渲染顺序

    渲染半透明对象时 使用 glBlend 建议按 z 顺序从后到前对对象进行排序 From opengl 文档 在应用程序中使用深度缓冲时 您需要注意渲染图元的顺序 需要首先渲染完全不透明的图元 然后按从后到前的顺序渲染部分不透明的图元 如果
  • 在 iPhone 中创建二维码

    我看过一些示例代码 这些代码正在从文本创建二维码 下面是代码 我们也可以从其他数据 如图像 生成二维码吗 NSString code 1001012023034 Barcode barcode Barcode alloc init self
  • 在Java中为数字添加前导零? [复制]

    这个问题在这里已经有答案了 有没有更好的方法来获得这个结果 如果 num 的位数多于位数 则此函数会失败 并且我觉得它应该在库中的某个地方 例如 Integer toString x 3d 或其他东西 static String intTo
  • 获取与 Windows 中的任务管理器相同的进程详细信息

    我编写了一个程序来获取当前正在运行的进程的内存详细信息psutil在Python 3中 问题是我得到的值与Windows任务管理器中的值不同 具体来说 如何在Python中获取进程的私有工作集大小 psutil 调用GetProcessMe
  • 如何制作或使用 WP7 的标准图像查看器

    我想做一个显示图片的应用程序 但我希望能够通过手势来放大和缩小 我通过在我的项目中包含一个工具包来解决这个问题 但我真正的问题是 我可以使用或者是否有一个已经为我创建的控件来显示图片 例如 WP7 手机本身的图片库 我以为没有 但 Face
  • Ansible 抛出“无法更新 apt 缓存:W:无法安全地从此类存储库更新”错误

    我对 Ansible 非常陌生 我正在尝试在 EC2 实例 Ubuntu 18 04 上安装 kubectl 来上课 我已经运行了剧本 一切进展顺利 直到遇到任务 4 然后抛出以下错误 致命 localhost 失败 gt changed
  • 在 URL 和 .htaccess 中使用空格

    我为我的城市编写了一个本地名称 电话 地址搜索引擎 用户必须能够通过访问以下任一 URL 来快速访问结果 search by number http domain com 5554651 search by lastname http do
  • 如何在 Windows Phone 8.1 中缓存页面

    以前在Windows Phone 8 0应用程序中 我们可以通过这种方式更深入地导航到同一页面 NavigationService Navigate new Uri SamePage xaml UriKind Relative 页面会自动缓
  • QuickGraph - 是否有算法可以找到一组顶点的所有父级(直到根顶点)

    在 QuickGraph 中 是否有算法可以查找一组顶点的所有父级 直到根顶点 换句话说 所有顶点的下方某处 在通往叶节点的路上 都有一个或多个顶点输入 因此 如果顶点是节点 并且边是依赖关系 则找到将受到给定节点集影响的所有节点 如果不是
  • 如何使用 Visual Studio 2019 面向 Windows 7?

    我想使用 Visual Studio 2019 来享受最新的 C 新增功能 但针对的是 Windows 7 我使用 VS 2019 向导创建了一个 Windows C 应用程序 在 Windows 10 上运行 A targetver h文
  • URLEncoder.encode() 和空格?

    我的服务器上有一个名为 some image png 名字里有一个空格 当我在浏览器 chrome 中输入 url 时 它会将空格转换为 20 some 20 png 当我从应用程序中使用 URLEncoder encode some im
  • GStreamer 同时录制和查看流

    我手头有一项奇怪的任务 我已经尝试了一切 我想知道你是否能帮忙 我的任务是抓取 RaspPi 发出的流并将其保存到我的电脑上 但是 我需要同时查看和保存它 这可以查看它 gst launch 1 0 udpsrc 端口 5000 应用程序
  • 相关子查询中的 MySQL LIMIT

    我有一个相关子查询 它将返回数量列表 但我需要最高数量 而且只需要最高数量 因此 我尝试引入 order by 和 LIMIT 1 来实现此目的 但 MySQL 抛出一个错误 指出它还不支持子查询中的限制 关于如何解决这个问题有什么想法吗