Rails-用OR组合条件

问题描述 投票:0回答:1

我正在用ruby on rails实现过滤逻辑,用户可以在其中结合OR运算符过滤记录。因此,我检查了在[[active record中实现OR的方式,由于我们在轨道5中,所以我们有or method来组合条件。

[使用OR方法时,我得到的查询如下所示,

SELECT "users".* FROM "users" WHERE ( ( ( "users"."first_name" ILIKE '%name1%' OR "users"."last_name" ILIKE '%name2%' ) OR "users"."email" ILIKE '%email%' ) OR ( "users"."email" ILIKE '%email%' ) );

查询版本类似于Model.where((((A OR B) OR C) OR D))。我们正在使用Postgres作为数据库。 

我怀疑Postgres中的(((A OR B) OR C) OR D)(A OR B OR C OR D)是否相等?两者之间是否有任何性能差异。

注意:我检查了由Ransack advanced search构造的查询,该查询以(((A OR B) OR C) OR D)格式构造。

ruby-on-rails postgresql activerecord ruby-on-rails-5 where-clause
1个回答
0
投票
在Postgres中(((A OR B) OR C) OR D)(A OR B OR C OR D)是否相等?

与Postgres无关,而是与逻辑运算符有关。是的,两个表达式都是等效的(尽管第一个表达式是不必要的复数):

    如果这四个条件中的任何一个为真,则两个逻辑表达式都产生一个真结果
  • 如果所有四个条件都为假,则两个表达式均产生错误结果
© www.soinside.com 2019 - 2024. All rights reserved.