当前位置: 首页 > 面试题库 >

Short-circuit logic evaluation operators

戎劲
2023-03-14
问题内容

Are there any short-circuit logic operators (specifically short-circuit AND
and short-circuit OR) that I can use in a WHERE clause in MySQL 5.5? If
there isn’t, what are the alternatives?

An abstract view at my problem along with an explanation as to why I need this
can be found at this fiddle:

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

In reality we are looking at millions of books in millions of bookstores in
thousands of cities in hundreds of countries, which is why we cannot accept
the overhead of receiving the unneeded information with every query we
dispatch and seriously need to find a way to make the evaluation stop as soon
as we have all rows that satisfy the current condition, before moving on to
the next OR.

Let me know if you need more information. Thanks in advance.

根据要求,以下是小提琴中使用的架构:

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;


 类似资料:
  • short 是一个开源的短域名服务,使用 Node.js 与 MongoDB 搭建,可以直接在你的 Server 程序中调用,也可以通过 Node.js 的 http server 模块以一个服务启动。 可以直接通过 Node.js 的 npm 进行安装: $ npm install short 可以直接在你的 Node.js 项目中这样调用,生成长域名对应的短链接: var mongoose =

  • 问题内容: 我有三个简短的变量。当我将两个加在一起并将结果分配给第三个时,eclipse告诉我需要将其强制转换为short! 但是,当我先进行简单分配,然后进行增量分配时,一切都很好。 为什么是这样 ? 问题答案: JLS(第15.8.2节)说: “将二进制+运算符应用于两个数字类型的操作数时,将执行加法运算,从而得出这些操作数之和。” “对操作数执行二进制数值提升(第 5.6.2节 )。” 这意

  • 主要内容:1 Java.lang Short介绍,2 Java.lang Short声明,3 Java.lang Short方法,4 Java.lang Short案例1 Java.lang Short介绍 Short类将原始的short类型值包装在对象中。它的对象仅包含一个short类型的字段。 2 Java.lang Short声明 3 Java.lang Short方法 方法 描述 byte byteValue() 此方法返回这个Short为一个字节的值。 int compareTo(Sh

  • 描述 (Description) java.math.BigDecimal.shortValueExact()将此BigDecimal转换为short,检查丢失的信息。 如果此BigDecimal具有非零小数部分或超出短结果的可能范围,则抛出ArithmeticException。 声明 (Declaration) 以下是java.math.BigDecimal.shortValueExact()

  • 描述 (Description) java.lang.reflect.Field.getShort(Object obj)方法获取静态或实例短字段的值。 声明 (Declaration) 以下是java.lang.reflect.Field.getShort(Object obj)方法的声明。 public short getShort(Object obj) throws IllegalA

  • 当使用if, elsif, until或者使用and或or运算符测试条件while使用短路评估。 例如 - if a < 0 and b > 0 then -- block of code end if 如果<0为假,那么Euphoria并不打算测试b是否大于0.它知道总体结果是假的,无论如何。 同样 - if a < 0 or b > 0 then -- block of code

  • key-board-short-cuts 是用 JavaScript 实现的简单键盘快捷键示例。

  • 问题内容: 我读到JVM在内部存储短,整数和长为4个字节的内容。我是从2000年的一篇文章中读到的,所以我不知道现在有多真实。 对于较新的JVM,使用short而不是integer / long可以提高性能吗?自2000年以来,实施的那部分是否发生了变化? 谢谢 问题答案: 使用您需要的东西,我认为短裤由于范围小而很少使用,并且采用大端格式。 任何性能上的提升都是最小的,但是就像我说的,如果您的应