短路逻辑求值运算符

2023-11-30

是否有短路逻辑运算符(特别是短路AND和短路OR)我可以用在WHEREMySQL 5.5 中的子句?如果没有,有什么替代方案?

我的问题的抽象观点以及为什么我需要这个的解释可以在这个小提琴中找到:

http://sqlfiddle.com/#!2/97fd1/3

事实上,我们正在数百个国家的数千个城市的数百万家书店中查看数百万本书,这就是为什么我们不能接受我们发送的每个查询都接收不需要的信息的开销,并且迫切需要找到一种方法来使一旦我们拥有满足当前条件的所有行,评估就会停止,然后再继续下一个 OR。

如果您需要更多信息,请与我们联系。提前致谢。


根据要求,这里是小提琴中使用的模式:

CREATE TABLE quantitycache (
  id INT AUTO_INCREMENT,
  quantity INT,
  book_id INT NOT NULL,
  bookstore_id INT NULL,
  city_id INT NULL,
  country_id INT NULL,
  PRIMARY KEY (id)
);

以及一些示例数据:

INSERT INTO quantitycache 
     (quantity, book_id, bookstore_id, city_id, country_id)
VALUES
     (5,        1,       1,            NULL,    NULL),
     (100,      2,       1,            NULL,    NULL),
     (7,        1,       2,            NULL,    NULL),
     (12,       1,       NULL,         1,       NULL),
     (12,       1,       NULL,         NULL,    1),
     (100,      2,       NULL,         1,       NULL),
     (100,      2,       NULL,         NULL,    1),
     (200,      3,       NULL,         1,       NULL),
     (250,      3,       NULL,         NULL,    1);

请记住,查询并不是强制执行的。您编写的查询可能在多个线程上运行,因此 where 子句中的短路运算符不会只产生一个结果。

相反,使用LIMIT子句仅返回第一行。

SELECT * FROM quantitycache
WHERE bookstore_id = 1 OR city_id = 1 OR country_id = 1
ORDER BY bookstore_id IS NULL ASC,
         city_id IS NULL ASC,
         country_id IS NULL ASC
LIMIT 1;

要获得结果集中所有书籍的最佳匹配,请将结果保存到临时表,找到最佳结果,然后返回感兴趣的字段。

CREATE TEMPORARY TABLE results (id int, book_id int, match_rank int);

INSERT INTO results (id, book_id, match_rank)
SELECT id, book_id, 
    -- this assumes that lower numbers are better
    CASE WHEN Bookstore_ID is not null then 1 
         WHEN City_ID is not null then 2 
         ELSE 3 END as match_rank
FROM quantitycache
WHERE bookstore_id = 1 OR city_id = 1 OR country_id = 1;

Select * 
from (
    select book_id, MIN(match_rank) as best_rank 
    from results 
    group by book_id
) as r
inner join results as rid 
    on r.book_id = rid.book_id 
    and rid.match_rank = r.best_rank
inner join quantitycache as q on q.id = rid.id;

DROP TABLE results;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

短路逻辑求值运算符 的相关文章

随机推荐

  • Ninject 与通用存储库 MVC 的绑定在无参数构造函数上返回错误

    我正在尝试使用一个相当简单的通用存储库来存储应用程序中的多个管理列表 管理员用户的功能只是 CRUD 以保持列表最新 以便在其他地方用作查找 我不断收到以下形式的错误 尝试创建类型的控制器时发生错误 WhatWorks Controller
  • 设置 Spring Web Service 时未找到端点映射

    我是设置 Spring Web 应用程序的初学者 我已经走到这一步了 但现在我发现自己陷入了困境 我收到以下错误 WARNING No endpoint mapping found for SaajSoapMessage http myco
  • 在 C# 中反射性地实现泛型类型推断

    我需要为脚本语言实现进行一些通用类型推断 我想知道我是否缺少一些简单的方法 目前 我只询问类型结构并忽略边界 为了说明这一点 下面是一个深度嵌套的示例 T foo
  • 经过一段时间的训练后,训练损失值正在增加,但模型检测物体的效果相当好

    我在训练 CNN 从我自己的数据集中检测对象时遇到了一个奇怪的问题 我正在使用迁移学习 并且在训练开始时 损失值正在下降 如预期 但过了一段时间 它变得越来越高 我不知道为什么会发生这种情况 与此同时 当我看着Images使用 Tensor
  • iphone 中的 tableview 问题

    我有一个UITableView已设置属性Grouped 它看起来像这样 边缘呈圆形 这很棒 当我开始滚动UITabelView圆边消失了 看起来像这样 圆边消失了 我应该如何进行以及当我滚动时UITableView上下圆边是否像第一张图片一
  • 我的应用程序中的直接“iTunes 中的评分”链接?

    我在 Stackoverflow 上看到过一些帖子 其中描述了如何允许用户定向到应用商店中的应用 有办法链接吗directly to the 评级和评论表在应用商店中 使用此博客中描述的技术可以实现这一点 http www mementio
  • 单击表格单元格内的按钮时,扩展表格视图并按适当的差异增加滚动视图内容大小

    我有一个 UITableView 它已添加到 UIScrollView 内 作为视图控制器的一部分 该视图控制器粘附到如下所示的模型的一部分 正如您在模型中看到的 UITableView 位于 特色企业 标签和包含绿色和粉色子视图的视图之间
  • 在 Matlab 中组合 2D 矩阵形成 3D 矩阵

    我有 3 个20x2 double arrays A B and C 我想将它们组合成一个 3d 数组D以便D 1 将返回A D 2 将返回B and D 3 将返回C Using cat沿着三维连接可能是一种优雅的方式 D cat 3 A
  • 如何检索 SQL Server RAISERROR(或 PRINT)消息?

    我正在尝试使用 PyODBC 从 python 中的 SQL Server Raiserror 获取警告消息 严重性故意设置得很低 因为它充当打印功能 但不必等到查询完成后再进行打印 我期望的输出会是这样的 Test Message col
  • SQL Server - 对值来自另一个表的列进行 CHECK 约束

    如何在列上设置 CHECK 约束 使其可接受的值范围来自另一个表 而无需硬编码 这是一个简化的示例 OneManyTable RoleID TaskID 10 Val1 10 Val2 20 Val1 20 Val2 MetaDataTab
  • javascript等待php完成功能并刷新页面

    我有以下案例 我有下拉菜单 可以从其中选择网站的货币并使用 onchange 事件触发 javascript 函数 Changecurrency 通过使用jquery的changecurrency 函数 我触发php文件 以便根据下拉选择的
  • Spark 迭代/递归算法 - 打破 Spark 沿袭

    我有一个递归 Spark 算法 它将 10 天的滑动窗口应用于数据集 原始数据集是从按日期分区的 Hive 表加载的 在每次迭代中 一组复杂的操作将应用于包含十天窗口的数据集 然后 最后一个日期被插入到原始 Hive 表中 下一个日期从 H
  • Python 老化时间,第 2 部分:时区 [重复]

    这个问题在这里已经有答案了 继我之前的问题之后 Python 老化时间 我现在遇到了一个关于时区的问题 事实证明它并不总是 0200 因此 当 strptime 尝试这样解析它时 它会抛出异常 我想过用 6 或其他什么方法去掉 0200 但
  • 为什么标记不出现?

    我拥有的 一个 RecyclerView 其中包含餐厅 酒吧等的图像 单击这些图像时会将您带到地图 我想要的 当点击它们时 您会看到一张带有标记的地图 其中标记有您周围的所述地点 我的问题 我在另一个应用程序中执行此操作 但另一个应用程序直
  • ILogger 未注入 Durable Functions v2.0

    目前我正在尝试添加一个ILogger or ILogger lt gt 到 Azure Durable Function 以便在活动函数中使用日志记录 登录编排函数工作正常 并被注入到方法本身中 但尝试构造函数注入ILogger总是导致空异
  • 强制 L1 缓存上的一些数据

    对这个简单的问题表示歉意 仍在与这里的一些内存概念作斗争 问题是 假设我有一个预先计算好的数组 A 我想重复访问它 有没有办法告诉 C 程序让这个数组尽可能靠近 CPU 缓存以获得最快的访问速度 谢谢 在大多数架构上 无法强制阵列使用 L1
  • 红袜混音和延迟

    我正在使用 SOX 混合音频 命令SOX m voice wav audio wav final wav是我正在使用的 我的目标是延迟 10 秒的 voice wav 如果我尝试使用延迟 10 0 那么我会得到双语音 怎样才能做对呢 htt
  • Android Studio 虚拟设备卡在 G 屏幕上

    被困在这个问题上太久了 在Android Studio上启动了一个新项目基本活动应用程序 制作了一个虚拟设备 但每当我启动它时 它都会转到一个 黑屏 然后我擦除了内存 现在它卡在带有 google G 徽标的屏幕上 下面有一个小加载栏 多斯
  • 制作更薄的 UITabBar

    我希望能够通过删除每个项目的标题并回收它们占用的垂直空间来缩小 UITabBar 的高度 就像 Tweetie 2 那样 这似乎无法在 xib 中或以编程方式设置 我是否必须子类化 UITabBar 并推出自己的 自己滚 我确信 Tweet
  • 短路逻辑求值运算符

    是否有短路逻辑运算符 特别是短路AND和短路OR 我可以用在WHEREMySQL 5 5 中的子句 如果没有 有什么替代方案 我的问题的抽象观点以及为什么我需要这个的解释可以在这个小提琴中找到 http sqlfiddle com 2 97