Как решить удалить с помощью внутреннего соединения в базе данных SQL? - PullRequest
0 голосов
/ 18 апреля 2019

Я получаю следующую ошибку при попытке удалить записи:

ОШИБКА: синтаксическая ошибка в или около "SPO"
ЛИНИЯ 1: УДАЛИТЬ SPO, SP
^

Это мой код:

DELETE SPO,SP 
FROM stock_pack_operation SPO  
INNER JOIN stock_picking SP ON sp.id = spo.picking_id  
WHERE sp.company_id = 1;

1 Ответ

1 голос
/ 18 апреля 2019

Вы не можете присоединиться к FROM из DELETE s в Postgres.

Если вы хотите удалить всю строку из stock_picking sp с company_id из 1 и все соответствующие строки из stock_pack_operation, вы можете использовать cte с предложением RETURNING.

WITH cte
(
DELETE FROM stock_picking sp
       WHERE sp.company_id = 1
       RETURNING sp.id
)
DELETE FROM stock_pack_operation spo
       USING cte
       WHERE spo.picking_id = cte.id;

Если вы хотите удалить все строки из stock_pack_operation, где picking_id - это одна из id s из stock_picking для компании с идентификатором 1, вы можете использовать USING.

DELETE FROM stock_pack_operation spo
       USING stock_picking sp
       WHERE spo.picking_id = sp.id
             AND sp.company_id = 1;
...