Обновите выбранные идентификаторы - PullRequest
0 голосов
/ 24 ноября 2018

Я делаю этот запрос, и он возвращает мне 88 идентификаторов

SELECT DISTINCT so.id
FROM stock_picking sp
                       INNER JOIN stock_move sm ON sp.id = sm.picking_id
                       INNER JOIN procurement_order po ON sm.procurement_id = po.id
                       INNER JOIN sale_order_line sol ON po.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 

            so.invoice_status = 'to invoice'
            and sp.state = 'done'       
            and inv.state != 'draft'        

Теперь я хочу обновить эти идентификаторы, и я попробовал это так, но я получаю сообщение об ошибке, как я могу сделать это правильно?

вместо выбора, я попробовал эту строку

update so set invoice_status = 'invoiced' but get an error

ERROR:  relation "so" does not exist
LINE 1: update so set invoice_status = 'invoiced'

1 Ответ

0 голосов
/ 24 ноября 2018

[so] - это псевдоним, который вы настроили для таблицы sale_order, и код может распознать его только в запросе, в котором вы установили псевдоним. Это, как говорится, если вы запустили запрос на обновление, который вы хотели обновить всестрок в таблице sale_order.Чтобы обновить таблицу только для идентификаторов, возвращаемых запросом SELECT об использовании следующего:

update sale_order set invoice_status = 'invoiced' 
where id in 
(
SELECT DISTINCT so.id
FROM stock_picking sp
                   INNER JOIN stock_move sm ON sp.id = sm.picking_id
                   INNER JOIN procurement_order po ON sm.procurement_id = po.id
                   INNER JOIN sale_order_line sol ON po.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 

        so.invoice_status = 'to invoice'
        and sp.state = 'done'       
        and inv.state != 'draft'
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...