【问题标题】:How to solve delete using inner join in sql database?如何解决在sql数据库中使用内连接删除?
【发布时间】:2019-04-18 20:10:15
【问题描述】:

尝试删除记录时出现以下错误:

错误:“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;

【问题讨论】:

  • 从您的声明中删除“SPO,SP”。受影响的表应该是什么?
  • 你不能用一个 DELETE 语句从两个表中删除。要加入另一个表,您必须使用 USING 了解详细信息,请参阅手册:postgresql.org/docs/current/sql-delete.html

标签: sql postgresql inner-join sql-delete


【解决方案1】:

您不能在 Postgres 中加入 FROMDELETEs。

如果要删除stock_picking sp 中的所有行,其中company_id1 以及所有对应的行来自stock_pack_operation,您可以使用带有RETURNING 子句的cte。

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_idstock_picking 中的ids 之一,对于ID 为1 的公司,您可以使用USING

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多