5

Sequelを使用して次のようなUPDATEステートメントを作成したいと思います(Postgres docsから)

UPDATE employees SET sales_count = sales_count + 1 FROM accounts
  WHERE accounts.name = 'Acme Corporation'
  AND employees.id = accounts.sales_person;

ただし、Sequelのドキュメントを見ると、FROM句を作成する方法がどこにあるかは明確ではありません。

これを行う方法はありますか?

ありがとう!

4

3 に答える 3

4

OK、ベン・リーの答えは私を正しい方向に導きました。解決:

DB[:employees].from(:employees, :accounts).
  where(:accounts__name => 'Acme Corporation').
  update_sql(:employees__sales_count => "employees.sales_count + 1".lit)

ここでの使用については少しわかり.litませんが、うまくいくようです。(また、コマンドを実行するのではupdate_sqlなくupdate、SQL 出力を生成するために使用しています。)

必要に応じて結果:

UPDATE "employees" 
   SET "employees"."sales_count" = employees.sales_count + 1 
  FROM "accounts"
 WHERE ("accounts"."name" = 'Acme Corporation')
于 2013-02-02T01:59:05.313 に答える
2

他の全員の回答には、1 つの小さな余分な節があります。

DB.from(:employees, :accounts).
  where(:accounts__name => 'Acme Corporation').
  update_sql(:employees__sales_count => "employees.sales_count + 1".lit)

2 つのテーブルで from() を実行している場合、DB[...] 内のテーブルは無視されます。

于 2015-06-11T14:57:02.840 に答える
0

通常の結合だけを使用できますか? それはまさにあなたのクエリではありませんが、あなたの目標を達成するはずですよね?

DB[:employees].left_outer_join(:accounts, :sales_person => :id).
    where('accounts.name' => 'Acme Corporation').
    update('employees.sales_count' => 'employees.sales_count' + 1)
于 2013-02-02T01:41:31.807 に答える