使用内部联接删除PostgreSQL时出错 博士后8.4

使用内部联接删除PostgreSQL时出错 博士后8.4,sql,postgresql,sql-delete,cascading-deletes,Sql,Postgresql,Sql Delete,Cascading Deletes,我发现以下错误: 错误:语法错误在>>内部据我所知,JOIN语法在DELETE语句中不受支持。根据,您可以使用某些类型的其他子查询;使用语法的可能特别有趣。该页面上有几个示例用于查看其他表的DELETE查询。您不能在DELETE语句中使用JOIN。而是使用USING并将第二张表放在那里。 类似的方法应该可以工作(很抱歉,我无法测试它,所以在开始处理事务后运行它,并检查结果是否与您在提交处理它之前所期望的一致;回滚,如果不一致) 这里是文档的链接。 嗯……您的delete语句毫无意义,因为您没有指

我发现以下错误:


错误:语法错误在>>内部据我所知,
JOIN
语法在
DELETE
语句中不受支持。根据,您可以使用某些类型的其他子查询;使用语法的
可能特别有趣。该页面上有几个示例用于查看其他表的
DELETE
查询。

您不能在DELETE语句中使用JOIN。而是使用USING并将第二张表放在那里。 类似的方法应该可以工作(很抱歉,我无法测试它,所以在
开始
处理事务后运行它,并检查结果是否与您在
提交
处理它之前所期望的一致;
回滚
,如果不一致)

这里是文档的链接。

嗯……您的
delete
语句毫无意义,因为您没有指定要从中删除行的表;我不知道postgres,但在SQl Server中,您应该将要删除的表的别名放在单词delete之后。它不知道要从哪个表中删除。如果从主表中删除时,其他表上有外键,它将自动级联并删除记录。我使用此示例形成自己的查询,并使用
作为语句的结尾,并删除了整个表。那太糟糕了。为什么是
在那里?你是对的,这是一个打字错误,我删除了;作为一般规则,您不应出于此原因复制/粘贴代码。此外,您还可以将查询包装在BEGIN中,然后回滚或提交(可选):
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';
DELETE
FROM processing_transaction AS pt 
USING processing_transaction_movement AS ptm, test_package tesp, test_batch tbat 
WHERE 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