sql - 更新子句中缺少的记录

标签 sql postgresql sql-update

通过此查询,我收到错误

ERROR:  missing FROM-clause entry for table "inv"
LINE 1: update stock_picking set invoice_status = inv.date_invoice

我的目标是如果满足所有条件,将stock_picking posts_date设置为inv.date_invoice,可以使用SQL吗?

update stock_picking set posting_date = inv.date_invoice
where id in 
(
SELECT DISTINCT sp.id
FROM stock_picking sp
                       INNER JOIN stock_move sm ON sp.id = sm.picking_id
                       INNER JOIN sale_order_line sol ON sm.sale_line_id = sol.id 
                       INNER JOIN sale_order so ON sol.order_id = so.id
                       INNER JOIN sale_order_invoice_rel so_inv_rel on so.id = so_inv_rel.order_id
                       INNER JOIN account_invoice inv on so_inv_rel.invoice_id = inv.id

    WHERE 

            sp.posting_date != inv.date_invoice
            and sm.posting_date != inv.date_invoice
            and sp.state = 'done'       
            and inv.state in ('open', 'paid')
            )

最佳答案

您可以尝试以下

update stock_picking S set posting_date = A.date_invoice
from 
(
SELECT DISTINCT sp.id, inv.date_invoice
FROM stock_picking sp
                       INNER JOIN stock_move sm ON sp.id = sm.picking_id
                       INNER JOIN sale_order_line sol ON sm.sale_line_id = sol.id 
                       INNER JOIN sale_order so ON sol.order_id = so.id
                       INNER JOIN sale_order_invoice_rel so_inv_rel on so.id = so_inv_rel.order_id
                       INNER JOIN account_invoice inv on so_inv_rel.invoice_id = inv.id

    WHERE 

            sp.posting_date != inv.date_invoice
            and sm.posting_date != inv.date_invoice
            and sp.state = 'done'       
            and inv.state in ('open', 'paid')
            ) A where S.id=A.id 

关于sql - 更新子句中缺少的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53610966/

相关文章:

SQL 服务器 : combine maximum result and second largest results in single query

postgresql - Postgres 的列名或表名什么时候需要引号,什么时候不需要?

php - Mysql更新错误

MySQL - ON 更新 CASCADE + foreign_key_checks = 0

sql - 想要使用更新触发器更新多条记录

SQL Server 获取查询的别名

python pickle vs sql效率

mysql - 避免大数据集中的N+1查询

python - 将字符串列表传递给原始 sql 查询(Python/Django)

sql - 如何使用附加列选择最大日期