我的数据库被测试数据污染,我想要清理一些行。 如果我尝试删除,我会收到外键约束失败的消息。 如果可能,我想避免更改表结构(添加ON CASCADE)
我试过这样的事情:
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);
答案 0 :(得分:1)
可以通过替换' ='来解决问题。与' IN'这样您的SQL内容如下:
DELETE from transactions WHERE itemID IN (SELECT itemID from items WHERE price=0);
DELETE from items WHERE price=0;
我希望这会有所帮助......