d3v*_*ded 5 sql postgresql cascading-deletes sql-delete
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';
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
错误:语法错误>> INNER << LINE 1:DELETE FROM processing_transaction AS pt INNER JOIN processi ...
请问你能帮我找到我的SQL查询中的错误
感谢您的支持@desislavkamenov @jan.现在我用这个:
开始工作;
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
ROLLBACK;
但我需要从两个表中删除数据(processing_transaction和processing_transaction_movement),我已经找到了这样的想法,发现我可以用"ON DELETE CASCADE"来做.但我不知道如何在这里使用它.所以请再帮我一次.
Des*_*nov 14
您不能在DELETE语句中使用JOIN.而是使用USING并将第二个表放在那里.这样的事情应该有用(对不起,但是我无法测试它,所以在BEGIN交易之后运行它并检查结果,如果它们是你期望COMMIT它之前; ROLLBACK如果它们不是).
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
Run Code Online (Sandbox Code Playgroud)
这是文档的链接. http://www.postgresql.org/docs/current/static/sql-delete.html