使用INNER JOIN删除PostgreSQL错误

时间:2012-11-13 16:42:19

标签: sql postgresql sql-delete cascading-deletes

Postgres 8.4

DELETE
FROM processing_transaction AS pt 
INNER JOIN processing_transaction_movement AS ptm 
ON pt.processing_transaction_id = ptm.processing_transaction_id
LEFT OUTER JOIN test_package tesp ON pt.test_package_id = tesp.test_package_id
LEFT OUTER JOIN test_batch tbat On tesp.test_batch_id = tbat.test_batch_id
WHERE pt.processing_transaction_type = 'TEST';

我收到以下错误:

  

错误:>> INNER<<<<<<   第1行:DELETE FROM processing_transaction AS pt INNER JOIN processi ...

请帮我在SQL查询中找到错误


感谢您的支持@desislavkamenov @jan。 现在我用这个:

  

开始工作;

     

DELETE   FROM processing_transaction AS pt   使用processing_transaction_movement AS ptm,test_package tesp,test_batch tbat   在哪里pt.processing_transaction_type ='TEST';   AND pt.processing_transaction_id = ptm.processing_transaction_id   AND pt.test_package_id = tesp.test_package_id   AND tesp.test_batch_id = tbat.test_batch_id

     

ROLLBACK;

但是我需要删除两个表(processing_transaction和processing_transaction_movement)中的数据,我已经找到了这样的想法,发现我可以用“ON DELETE CASCADE”来做。但我不知道如何在这里使用它。 所以请再次帮助我。

2 个答案:

答案 0 :(得分:14)

您无法在DELETE语句中使用JOIN。而是使用USING并将第二个表放在那里。 这样的事情应该有效(对不起但是我无法测试它,所以在BEGIN事务之后运行它并检查结果是否符合它COMMIT之前的结果; {{1}如果他们不是)。

ROLLBACK

以下是文档的链接。 http://www.postgresql.org/docs/current/static/sql-delete.html

答案 1 :(得分:2)

据我所知,JOIN语句中不支持DELETE语法。根据{{​​3}},您可以使用某些其他子查询;特别是USING语法可能很有趣。该页面上有一些示例用于查看其他表的DELETE查询。