Rails - 用 OR 组合条件

Rails - Combing conditions with OR

我正在 ruby 上的 rails 中实现过滤逻辑,用户可以在其中过滤与 OR 运算符 相结合的记录。所以我检查了在 active record 中实现 OR 的方法,因为我们在 rails 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 作为数据库。

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

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

is (((A OR B) OR C) OR D) and (A OR B OR C OR D) equal in Postgres?

不是关于 Postgres,而是关于一般的逻辑运算符。是的,两个表达式是等价的(虽然第一个是不必要的复杂):

  • 如果 4 个条件中的任何一个为真,则两个逻辑表达式都会产生一个真结果
  • 如果所有 4 个条件都为假,则两个表达式都会产生错误的结果