5

使用Sequel我想创建一个如下所示的 UPDATE 语句(来自Postgres 文档

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

好的,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')
于 2013-02-02T01:59:05.313 回答
2

其他人的答案都有一个微小的多余条款。

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

如果您正在使用两个表执行 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 回答