当前位置: 首页 > 知识库问答 >
问题:

计算为TRUE的表达式不影响WHERE子句

严劲
2023-03-14

请看以下三个查询。我无法理解计算结果为TRUE的条件在附加到where子句时如何不返回行。我希望在第二个查询中得到User1,因为第一个查询显示条件的计算结果为TRUE。

cr> select full_name, labels, not 'autogenerated' = ANY(labels), not 'autogenerated' = ANY(labels) or labels = [] from testdb_master_core_users;
+----------------+-------------------+-------------------------------------+--------------------------------------------------------+
| full_name      | labels            | (NOT 'autogenerated' = ANY(labels)) | ((NOT 'autogenerated' = ANY(labels)) OR (labels = [])) |
+----------------+-------------------+-------------------------------------+--------------------------------------------------------+
| User2 Lastname | ["otherlabel"]    | TRUE                                | TRUE                                                   |
| User3 Lastname | ["autogenerated"] | FALSE                               | FALSE                                                  |
| User1 Lastname | []                | TRUE                                | TRUE                                                   |
+----------------+-------------------+-------------------------------------+--------------------------------------------------------+
SELECT 3 rows in set (0.003 sec)
cr> select full_name, labels, not 'autogenerated' = ANY(labels) from testdb_master_core_users where not 'autogenerated' = ANY(labels);
+----------------+----------------+-------------------------------------+
| full_name      | labels         | (NOT 'autogenerated' = ANY(labels)) |
+----------------+----------------+-------------------------------------+
| User2 Lastname | ["otherlabel"] | TRUE                                |
+----------------+----------------+-------------------------------------+
SELECT 1 row in set (0.002 sec)
cr> select full_name, labels, not 'autogenerated' = ANY(labels) from testdb_master_core_users where not 'autogenerated' = ANY(labels) or labels = [];
+----------------+----------------+-------------------------------------+
| full_name      | labels         | (NOT 'autogenerated' = ANY(labels)) |
+----------------+----------------+-------------------------------------+
| User2 Lastname | ["otherlabel"] | TRUE                                |
| User1 Lastname | []             | TRUE                                |
+----------------+----------------+-------------------------------------+
SELECT 2 rows in set (0.002 sec)

共有1个答案

柴茂材
2023-03-14

您的期望是正确的-第二个查询也应该返回User1。

这种行为是由于select中的表达式的计算方式不同于where子句中的表达式。后者利用了底层lucene索引,似乎对NOT进行了错误的转换,从而阻止了空列表的发现。

这个问题将在即将发布的1.0.6和1.1.1版本中得到解决。

 类似资料:
  • 使用DevTools控制台的求值计算功能,探测页面上任何项的状态。 DevTools控制台允许您以特别的方式了解页面中项的状态。他可以计算JavaScript的任何表达式,控制台本身支持几个功能。 TL;DR 计算键入的表达式。 使用其中一个快捷方式选择元素。 使用 inspect()检查DOM元素和JavaScript对象。 使用$0 - 4访问最近选择的元素和对象。 操作表达式 在控制台中输入

  • 我对一个< code>select有一些奇怪的问题。< code>WHERE子句中的顺序可能会影响结果吗? 这是我的选择: 这将重现这个结果:http://dl.dropbox.com/u/4892450/sqlSelectProblem/select1.PNG 当我使用这个条件时: (不同的顺序) 我得到一个不同的结果(参见 列): http://dl.dropbox.com/u/4892450

  • 问题内容: 我如何使它对任何数字格式和任何数字都有效 目前仅对1-999-999-9999有效 问题答案: 采用: 参考: 模式匹配

  • 主要内容:示例在MS Access中,表达式就像Excel中的公式。 这包括一些可以单独使用或组合使用以产生结果的元素。 表达式可以包括运算符,常量,函数和标识符。 表达式可用于执行各种任务,从检索控件的值或将查询条件提供给查询来创建计算的控件和字段,或者为报表定义组级别。 在本章中,我们将着重于创建一个称为计算表达式的非常具体的表达式。创建几个计算的字段,这些字段将计算并显示不存储在数据库本身任何位置的数据,

  • 当我们想临时修攺某个变量的值或查看其内部方法返回值的时候,可以使用计算表达式功能. Android Studio中提供了一个计算表达式和代码片段的功能, 使用起来非常方便.它除了支持正则表达式计算以外,还支持操作表达式,匿名表达式和内部类的计算. 两种计算模式: Expression Mode: 计算单行表达式 Code Fragment Mode: 计算代码片段, 我们可以对声明、赋值、循环和i

  • Evaluates simple math expression like 2*4 or 10/2 and outputs its result. You can use \ operator which is equivalent to round(a/b). 计算简单的数学表达式,比如2*4 或 10/2,并输出结果。\ 操作符结果同 round(a/b)。 Very useful in CS