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 に答える