gpt4 book ai didi

sql - 如何使用 Arel 正确地向带有 'or' 和 'and' 子句的 SQL 查询添加括号?

转载 作者:数据小太阳 更新时间:2023-10-29 07:02:04 24 4
gpt4 key购买 nike

我正在使用 Ruby on Rails 3.2.2,我想生成以下 SQL 查询:

SELECT `articles`.* FROM `articles` WHERE (`articles`.`user_id` = 1 OR `articles`.`status` = 'published' OR (`articles`.`status` = 'temp' AND `articles`.`user_id` IN (10, 11, 12, <...>))) 

通过使用 Arel这样

Article
.where(
arel_table[:user_id].eq(1)
.or(arel_table[:status].eq("published"))
.or(
arel_table[:status].eq("temp")
.and(
arel_table[:user_id].in(10, 11, 12, <...>)
)
)
)

它生成以下内容(注意:括号与第一个 SQL 查询不同):

SELECT `articles`.* FROM `articles` WHERE (((`articles`.`user_id` = 1 OR `articles`.`status` = 'published') OR `articles`.`status` = 'temp' AND `articles`.`user_id` IN (10, 11, 12, <...>))) 

因为我认为后一个 SQL 查询不像第一个那样“有效”,我怎么能使用 Arel(或者,也许,其他东西)所以要生成第一个 SQL 查询?

更新(评论后)

鉴于上面的 SQL 查询“工作”相同,但我仍然想生成与问题中的第一个完全相同的 SQL 查询(这样做的主要原因是第一个 SQL 查询比第二个更具可读性,因为在第一个中使用较少和“显式”括号),我如何通过使用 Arel 来实现?

最佳答案

我遇到了同样的问题。我在网上搜索了几个小时,终于找到了一个名为 grouping 的方法。在 Arel::FactoryMethods它只是在表达式周围添加方括号。

您应该使用 arel_table.grouping(...) 调用来包装您的

关于sql - 如何使用 Arel 正确地向带有 'or' 和 'and' 子句的 SQL 查询添加括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11190792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com