问题描述
我正在尝试在 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 (将#修改为@)