使用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子句。
有办法做到这一点吗?
谢谢!
答案 0 :(得分:3)
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)