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 个条件都为假,则两个表达式都会产生错误的结果
我正在 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 个条件都为假,则两个表达式都会产生错误的结果