2017-11-07 23 views
0

데이터베이스가 테스트 데이터로 오염되어 일부 행을 정리하고 싶습니다. 삭제하려고하면 외래 키 제약 조건이 실패했다는 메시지가 나타납니다. 나는 (CASCADE ON 추가) 테이블 구조테이블 구조를 변경하지 않고 캐스케이드 삭제

나는이 같은 노력 변경하는 것을 방지 할 수 있습니다 경우 : 부속 여러 반환 할 수 없습니다 때문에,

DELETE from transactions WHERE itemID = (SELECT itemID from items WHERE price=0); 
DELETE from items WHERE price=0; 

하지만이 작동하지 않습니다 행. 내가 그것을 루프 몇 가지 마술을 할 수 있습니다 가정,하지만 난 (도 감사합니다 루프없이 답) 그 사용에 제로 경험이)

스키마 :

CREATE TABLE items (itemID int, price int, description varchar(30), PRIMARY KEY(itemID)); 
CREATE TABLE transactions (transactionID int, itemID int, PRIMARY KEY (transactionID) , FOREIGN KEY (itemID) REFERENCES items(itemID)); 
INSERT INTO items VALUES (1, 0, "TEST"); 
INSERT INTO items VALUES (2, 0, "TEST2"); 
INSERT INTO transactions VALUES (1, 2); 
INSERT INTO transactions VALUES (2, 2); 
INSERT INTO transactions VALUES (3, 1); 

답변

1

문제는 대체함으로써 해결 될 수 있습니다 '='다음과 같이 SQL 읽도록 'IN'과 :이 도움이되기를 바랍니다

DELETE from transactions WHERE itemID IN (SELECT itemID from items WHERE price=0); 
DELETE from items WHERE price=0; 

...

+0

감사합니다. 그게 내가 예상했던 것보다 쉬웠 어. :) – abinmorth