我试图弄清楚如何创建一个Sequel数据集,该数据集包含函数调用和常量作为其select
的一部分并使用别名。我坚持使用正确的语法。
[我试图避免插入原始SQL,但是如果需要的话,我会尽可能地链接结果数据集并引用原始SQL中的列别名。
我的实际查询更复杂(并且我实际上没有调用sin
,它只是一个函数调用的示例),但是出于说明的目的,这是我试图在SQL中执行的简化版本:
SELECT
0 AS a, -- constant
sin(t.x) AS b, -- function call with aliased column value argument
t.x AS c
FROM
T AS t
;
等同的,偶像的,续集是什么?到目前为止,我有:
DB[:T.as(:t)].
select(
#0 as a, # How? constant
#sin(t.x) as b, # How? function call with aliased column value argument
:t__x.as(:c)
)
[如果您想要更简洁的方法,则可以使用带有三重下划线的符号使用隐式别名,仅将选择方法与虚拟行块一起使用:
DB[:T___t].select('0'.lit.as(:a), :t__x___c){sin(t__x).as(b)}
这与所选列的顺序不完全相同,但这通常无关紧要。
在反复研究优秀的Sequel docs之后,我想出了以下对我有用的解决方案:
DB[:T.as(:t)].
select_more('0'.lit.as(:a)).
select_more(:sin.sql_function(:t__x).as(:b)).
select_more(:t__x.as(:c))
如果有人知道更简洁或惯用的表达方式,请分享。