在 Ruby Sequel 库的“具有”块中使用相等比较

问题描述

我正在尝试在 Ruby(Ruby 2.5.7,Sequel 5.28.0)中通过 Sequel 构建一个 SQL“have”子句,但在使用相等比较时遇到问题。

所有文档和示例都表明,为 <><=>= 等操作符构建一个包含块是可行的。但是,= 会抛出一个 SyntaxError

如果我使用 having 构造一个 > 语句,我会正确地输出 SQL:

query.having do sum(Sequel.case({{column => nil} => 1},0)) > count.function.* end
=> #<Sequel::Postgres::Dataset: "SELECT * FROM \"schema\".\"table\" GROUP BY \"id\" HAVING (sum((CASE WHEN (\"column\" IS NULL) THEN 1 ELSE 0 END)) > count(*))">

但是如果我将 > 更改为 =,我会得到一个 SyntaxError

query.having do sum(Sequel.case({{column => nil} => 1},0)) = count.function.* end
SyntaxError: unexpected '=',expecting keyword_end
...nil} => 1},0)) = count.function.* end
...                              ^
SyntaxError: unexpected keyword_end,expecting end-of-input
... 1},0)) = count.function.* end
...                            ^~~

在这种情况下,什么是有效的 = 运算符?我在 Sequel 文档或规范中找不到显示此用法的提及。如果我错过了这一点,抱歉,如果有人指出该信息的位置,我很乐意重新阅读。

==<=> 都会导致不想要的和不准确的 SQL,而且我也不能通过 <=>= 的组合来破解它,因为 {{1 }} 块似乎没有将 having 识别为多个条件(它只需要最后一个条件)。

&&

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)