2017-11-07 15 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

問題が交換することによって解決することができます'=' 'IN' として次のようにSQLを読み取るように:

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

私はこれが役に立てば幸い...

+0

感謝。それは私が期待したよりも簡単だった:) – abinmorth

関連する問題