如何在Oracle数据库中同时对2个表进行删除?
How to carry out deletions from 2 tables, at the same time in Oracle database?
在我的 Oracle
数据库中,我希望从 2 个不同的 table 中删除行。
问题是,如果我先从 KENNEL 中删除行,那么在 DOG table 中找不到要删除的行。
下面是我要从两个 table 中删除的 SQL statements
。
DELETE FROM KENNEL WHERE COUNTRY_ID IS NULL;
DELETE FROM DOG WHERE ID IN (SELECT DOG_ID FROM KENNEL WHERE COUNTRY_ID IS NULL);
如何解决此问题,以便 同时进行 2 次删除,并确保同时删除 table 中的行?
注意:我不能从 DOG 然后 KENNEL 删除,因为 KENNEL 是必须先删除的子记录。
UPDATE DOG SET [some non-key field] = 'XXX' WHERE ID IN (SELECT DOG_ID FROM KENNEL WHERE COUNTRY_ID IS NULL);
DELETE FROM KENNEL WHERE COUNTRY_ID IS NULL;
DELETE FROM DOG WHERE [non-key field] = 'XXX';
我会像这样执行这组删除操作:
-- delete rows from child table first
DELETE FROM KENNEL WHERE COUNTRY_ID IS NULL;
-- now delete any parent rows that don't have any child records
DELETE FROM DOG WHERE ID not exists (SELECT DOG_ID FROM KENNEL);
这样做意味着如果 kennel table 中给定 dog_id 的 country_ids 并非全部为空,您就不会尝试删除父记录 -如果你尝试它会出错。
在我的 Oracle
数据库中,我希望从 2 个不同的 table 中删除行。
问题是,如果我先从 KENNEL 中删除行,那么在 DOG table 中找不到要删除的行。
下面是我要从两个 table 中删除的 SQL statements
。
DELETE FROM KENNEL WHERE COUNTRY_ID IS NULL;
DELETE FROM DOG WHERE ID IN (SELECT DOG_ID FROM KENNEL WHERE COUNTRY_ID IS NULL);
如何解决此问题,以便 同时进行 2 次删除,并确保同时删除 table 中的行?
注意:我不能从 DOG 然后 KENNEL 删除,因为 KENNEL 是必须先删除的子记录。
UPDATE DOG SET [some non-key field] = 'XXX' WHERE ID IN (SELECT DOG_ID FROM KENNEL WHERE COUNTRY_ID IS NULL);
DELETE FROM KENNEL WHERE COUNTRY_ID IS NULL;
DELETE FROM DOG WHERE [non-key field] = 'XXX';
我会像这样执行这组删除操作:
-- delete rows from child table first
DELETE FROM KENNEL WHERE COUNTRY_ID IS NULL;
-- now delete any parent rows that don't have any child records
DELETE FROM DOG WHERE ID not exists (SELECT DOG_ID FROM KENNEL);
这样做意味着如果 kennel table 中给定 dog_id 的 country_ids 并非全部为空,您就不会尝试删除父记录 -如果你尝试它会出错。