【发布时间】:2019-08-14 08:45:12
【问题描述】:
如何在Rails中获取UNION运算结果。
鉴于我有以下 SQL 语句
SELECT "sip_trunks".* FROM "sip_trunks" WHERE "sip_trunks"."default" = t LIMIT 1 UNION ALL SELECT "sip_trunks".* FROM "sip_trunks" WHERE "sip_trunks"."default" = f LIMIT 1
到目前为止,我已经设法使用 AREL 和 union all 语句构建 SQL。
SipTrunk.where(default: true).limit(1).union(:all,SipTrunk.where(default: false).limit(1))
但尝试查询此结果和 AREL,即 Arel::Nodes::UnionAll,我无法获得数据库结果。
同时在语句上运行 to_sql 会产生这样的 SQL..
( SELECT "sip_trunks".* FROM "sip_trunks" WHERE "sip_trunks"."default" = $1 LIMIT 1 UNION ALL SELECT "sip_trunks".* FROM "sip_trunks" WHERE "sip_trunks"."default" = $2 LIMIT 1 )
这似乎是一个准备好的语句,但我在 DB 中没有看到任何准备好的语句
尝试通过find_by_sql使用上述SQL
SipTrunk.find_by_sql(SipTrunk.where(default: true).limit(1).union(:all,SipTrunk.where(default: false).limit(1)).to_sql,[['default',true],['default',false]])
出现以下错误
ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR: syntax error at or near "UNION"
LINE 1: ...trunks" WHERE "sip_trunks"."default" = $1 LIMIT 1 UNION ALL ...
如何从这里获取最终的 SQL 行?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 activerecord union arel