当我尝试使用内部更新时出现此错误:
ERROR: syntax error at or near "INNER"
LINE 1: UPDATE sale_order AS so SET state='progress' INNER JOIN sale...
^
语法是:
UPDATE sale_order AS so
SET so.state='progress'
INNER JOIN sale_order_invoice_rel AS soi ON so.id= soi.order_id
INNER JOIN account_invoice AS ai ON soi.invoice_id=ai.id
WHERE so.state='done' AND ai.state !='paid';
表的架构是:
sale_order : id | state
sale_order_invoice_rel : id | order_id |invoice_id
account_invoice : id | state
答案 0 :(得分:0)
postgres更新语法是:
UPDATE sale_order AS so
SET state = 'progress'
FROM sale_order_invoice_rel AS soi ON so.id = soi.order_id -- <<-- this line
JOIN account_invoice AS ai ON soi.invoice_id = ai.id
WHERE so.state = 'done' AND ai.state <> 'paid' -- <<-- this line
;
已更新(已从SET so.state = ...
移除相关名称 - &gt; SET state =
...)
UPDATE2(哎呀!)2015-02-12(将ON ...
移到WHERE ...
子句)
UPDATE sale_order AS so
SET state = 'progress'
FROM sale_order_invoice_rel AS soi
JOIN account_invoice AS ai ON soi.invoice_id = ai.id
WHERE so.id = soi.order_id -- <<-- this line
AND so.state = 'done' AND ai.state <> 'paid'
;
答案 1 :(得分:-1)
我在使用DELETE脚本时遇到了同样的问题,并且找到了一个对同一问题可能有用的解决方案。
您可以使用以下其他表在PostgreSQL中创建JOINS:
UPDATE
sale_order AS so
USING
sale_order_invoice_rel AS soi,
account_invoice AS ai
SET so.state='progress'
WHERE so.state='done' AND ai.state !='paid'
AND so.id= soi.order_id
AND soi.invoice_id=ai.id;
希望对您有帮助。