2012-11-13 4 views
4

포스트 그레스 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으로 삭제 PostgreSQL의 :오류가

ERROR: syntax error at >>INNER<< LINE 1: DELETE FROM processing_transaction AS pt INNER JOIN processi...

당신이 내 SQL 쿼리에서 오류를 찾는 데 도움이 될 수하십시오


@desislavkamenov @jan에 감사드립니다. 지금 나는이 사용 :

BEGIN WORK;

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;

을하지만, 나는 그런 somethink을 찾고있는 두 테이블 (processing_transaction 및 processing_transaction_movement)에서 데이터를 삭제해야 내가 ON CASCADE 삭제 "와 함께 할 수 있다는 것을 발견 ". 그러나 나는 이것을 여기에서 사용하는 방법을 모른다. 그래서 다시 도와주세요.

+0

음 ... 삭제할 행이있는 표를 지정하지 않았으므로'delete' 문은 무의미합니다. –

+0

나는 postgres를 모르지만 SQl Server에서는 delete라는 단어 뒤에 삭제할 테이블의 별칭을 넣는다. 삭제할 테이블을 알지 못합니다. – HLGEM

+0

기본 테이블에서 삭제할 때 다른 테이블에 외래 키가있는 경우 자동으로 레코드를 계단식으로 삭제합니다. –

답변

11

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 

다음은 문서에 대한 링크입니다. http://www.postgresql.org/docs/current/static/sql-delete.html

+1

이 예제를 사용하여 내 자신의 쿼리를 만들었고 명령문의 끝으로'; '를 사용하고 전체 테이블을 삭제했습니다. 그게 빨려. 왜 그곳에 있습니까? –

+0

당신 말이 맞아요, 그건 오타 였어요. 쿼리에서. –

+0

일반적으로 이러한 이유로 코드를 복사하거나 붙여 넣으면 안됩니다. 또한 BEGIN에서 쿼리를 래핑하고 선택적으로 롤백하거나 커밋 할 수 있습니다. http://www.postgresql.org/docs/9.3/static/sql-begin.html – Momer

2

내가 알 수있는 한 JOIN 구문은 DELETE 문에서 지원되지 않습니다. documentation for DELETE에 따르면 특정 종류의 다른 하위 쿼리를 사용할 수 있습니다. 특히 USING 구문은 흥미로울 수 있습니다. 다른 테이블을 보는 DELETE 쿼리에 대한 해당 페이지의 몇 가지 예가 있습니다.