我正在用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)
格式构造。
在Postgres中(((A OR B) OR C) OR D)
和(A OR B OR C OR D)
是否相等?
与Postgres无关,而是与逻辑运算符有关。是的,两个表达式都是等效的(尽管第一个表达式是不必要的复数):