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

问题描述 投票:0回答:2

我试图弄清楚如何创建一个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)
    )
sql ruby sequel
2个回答
2
投票

[如果您想要更简洁的方法,则可以使用带有三重下划线的符号使用隐式别名,仅将选择方法与虚拟行块一起使用:

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

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


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

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.