5

ポストグル 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 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

ロールバック;

しかし、2 つのテーブル(processing_transaction と processing_transaction_movement)からデータを削除する必要があります。そのような考えを探していて、「ON DELETE CASCADE」で実行できることがわかりました。しかし、ここでこれを使用する方法がわかりません。だからまた助けてください。

4

2 に答える 2

14

DELETE ステートメントで JOIN を使用することはできません。代わりに USING を使用して、そこに 2 番目のテーブルを配置します。このようなものは機能するはずです (申し訳ありませんが、テストすることはできませんBEGIN。トランザクションを実行した後に実行し、結果が予想どおりかどうかを確認してから実行してくださいCOMMITROLLBACKそうでない場合)。

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

ここにドキュメントへのリンクがあります。 http://www.postgresql.org/docs/current/static/sql-delete.html

于 2012-11-13T16:49:14.410 に答える
2

私が知る限り、構文はステートメントJOINではサポートされていません。DELETEDELETEのドキュメントによると、特定の種類の他のサブクエリを使用できます。特に構文は興味深いかもしれません。そのページには、他のテーブルを参照するクエリの例がいくつかあります。USINGDELETE

于 2012-11-13T16:47:01.120 に答える