使用Sequel,我可以使用FROM子句创建UPDATE语句

时间:2013-02-02 01:19:17

标签: sql ruby sequel

使用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 documentation并不清楚哪里可以创建FROM子句。

有办法做到这一点吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

好吧,Ben Lee的回答让我朝着正确的方向前进。解决方案:

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

答案 1 :(得分:1)

其他人的答案都有一个微不足道的条款。

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

如果您正在使用两个表执行from(),则忽略DB [...]内的一个。

答案 2 :(得分:0)

您可以使用常规加入吗?它不完全是您的查询,但它应该实现您的目标,对吗?

DB[:employees].left_outer_join(:accounts, :sales_person => :id).
    where('accounts.name' => 'Acme Corporation').
    update('employees.sales_count' => 'employees.sales_count' + 1)