我正在试图弄清楚如何创建一个包含函数调用和常量的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)
)
答案 0 :(得分:2)
如果您想要更简洁的方法,可以使用带有三重下划线的符号使用隐式别名,只使用带有虚拟行块的select方法:
DB[:T___t].select('0'.lit.as(:a), :t__x___c){sin(t__x).as(b)}
这与所选列的顺序不同完全相同,但这通常无关紧要。
答案 1 :(得分:0)
在优秀的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))
如果有人知道更简洁或惯用的表达方式,请分享。