如何在SQL(Postgres)中强制执行过滤器评估顺序?

TR

我有一张简化的表格,看起来像这样:

id | type | header    | body
===========================================
 1 | A    | {type: A} | {content: "Hi"}
 2 | A    | {type: A} | {content: "Hello"}
 3 | B    | {type: B} | ["Hi","Hello"]

以下查询给我一个错误:

> select * from Table where header->>'type'='A' and body->>'content' like 'H%'
ERROR:  cannot extract field from a non-object

这很公平,但是此查询也是如此:

> select * from (select * from Table where header->>'type'='A') where body->>'content' like 'H%'

而这些不包括:

> select * from Table where type='A' and body->>'content' like 'H%'
> select * from Table where header->>'type'='A' and body->>'content'='Hello'

对于这种特定情况,我有变通办法(“ like”谓词没有得到适当的优先权),但令我担心的是,即使在这种情况下,我显然也无法依靠括号来控制评估顺序,它更改了对数据应用的约束。有什么通用的方法可以做到这一点吗?

戈登·利诺夫

您应该可以通过以下命令强制执行评估订单case

select *
from Table
where (case when header->>'type'='A'
            then (case when body->>'content' like 'H%' then 1 end)
       end) = 1;

这是我建议仅在case语句中放入语句的唯一时间where

您还可以使用CTE保证订单:

with t as (
      select t.*
      from table t
      where header->>'type'='A'
     )
select t.*
from t
where body->>'content' like 'H%';

但是,这导致了实现中间结果的额外开销。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

GHC如何在多线程应用程序中强制执行评估?

来自分类Dev

GHC如何在多线程应用程序中强制执行评估?

来自分类Dev

如何在Wordpress页面中执行过滤器代码

来自分类Dev

如何在go框架中为不同的测试强制执行测试顺序?

来自分类Dev

如何在SQL查询中按过滤器计数?

来自分类Dev

Cpp,强制执行预处理器评估顺序

来自分类Dev

如何强制执行结果顺序

来自分类Dev

如何在Spark SQL中强制执行内存中的分块排序?

来自分类Dev

如何在Spark SQL中强制执行内存中的分块排序?

来自分类Dev

如何在SQL Server上强制执行SELECT阻止?

来自分类Dev

如何在.Net中强制执行OutOfMemoryException

来自分类Dev

如何在Perl中强制执行long double

来自分类Dev

如何在Chrome中强制执行504错误

来自分类Dev

如何在vb.net中调试强制执行?

来自分类Dev

如何在Perl中强制执行long double

来自分类Dev

如何在Java中强制执行构造函数

来自分类Dev

如何在GNOME Web中强制执行大文本?

来自分类Dev

如何在Jenkins DSL中强制执行参数排序?

来自分类Dev

如何在matplotlib中的网格内强制执行图?

来自分类Dev

如何在 Antlr 中强制执行某些规则

来自分类Dev

如何在 Java <= 8 中强制执行模块边界

来自分类Dev

如何在汇总上执行“或”过滤器?

来自分类Dev

如何在 django 中对外键模型执行过滤器或聚合或注释

来自分类Dev

有没有办法在RestAssured中强制过滤器顺序?

来自分类Dev

如何通过Builder模式强制执行的设定参数的顺序

来自分类Dev

如何在Tableau中的过滤器条件公式中将“过滤器”设置为“全部”?

来自分类Dev

如何在 angular2 中创建独特的过滤器过滤器组件

来自分类Dev

如何在Google表格中的“ =过滤器”中添加“或”

来自分类Dev

Web API中具有多个过滤器的执行顺序

Related 相关文章

  1. 1

    GHC如何在多线程应用程序中强制执行评估?

  2. 2

    GHC如何在多线程应用程序中强制执行评估?

  3. 3

    如何在Wordpress页面中执行过滤器代码

  4. 4

    如何在go框架中为不同的测试强制执行测试顺序?

  5. 5

    如何在SQL查询中按过滤器计数?

  6. 6

    Cpp,强制执行预处理器评估顺序

  7. 7

    如何强制执行结果顺序

  8. 8

    如何在Spark SQL中强制执行内存中的分块排序?

  9. 9

    如何在Spark SQL中强制执行内存中的分块排序?

  10. 10

    如何在SQL Server上强制执行SELECT阻止?

  11. 11

    如何在.Net中强制执行OutOfMemoryException

  12. 12

    如何在Perl中强制执行long double

  13. 13

    如何在Chrome中强制执行504错误

  14. 14

    如何在vb.net中调试强制执行?

  15. 15

    如何在Perl中强制执行long double

  16. 16

    如何在Java中强制执行构造函数

  17. 17

    如何在GNOME Web中强制执行大文本?

  18. 18

    如何在Jenkins DSL中强制执行参数排序?

  19. 19

    如何在matplotlib中的网格内强制执行图?

  20. 20

    如何在 Antlr 中强制执行某些规则

  21. 21

    如何在 Java <= 8 中强制执行模块边界

  22. 22

    如何在汇总上执行“或”过滤器?

  23. 23

    如何在 django 中对外键模型执行过滤器或聚合或注释

  24. 24

    有没有办法在RestAssured中强制过滤器顺序?

  25. 25

    如何通过Builder模式强制执行的设定参数的顺序

  26. 26

    如何在Tableau中的过滤器条件公式中将“过滤器”设置为“全部”?

  27. 27

    如何在 angular2 中创建独特的过滤器过滤器组件

  28. 28

    如何在Google表格中的“ =过滤器”中添加“或”

  29. 29

    Web API中具有多个过滤器的执行顺序

热门标签

归档