常量,函数调用的续集格式在select中?

时间:2011-12-14 18:48:29

标签: sql sequel

我正在试图弄清楚如何创建一个包含函数调用和常量的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)
    )

2 个答案:

答案 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))

如果有人知道更简洁或惯用的表达方式,请分享。