0

我试图弄清楚如何创建一个包含函数调用和常量作为其一部分并使用别名的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)
    )
4

2 回答 2

2

如果您想要更简洁的方式,可以使用带有三个下划线的符号来使用隐式别名,只需使用带有虚拟行块的 select 方法:

DB[:T___t].select('0'.lit.as(:a), :t__x___c){sin(t__x).as(b)}

这并不完全相同,因为所选列的顺序不同,但这通常无关紧要。

于 2011-12-15T17:06:30.677 回答
0

在对优秀的Sequel 文档进行了大量研究之后,我想出了以下对我有用的解决方案:

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

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

于 2011-12-14T23:22:32.450 回答