【发布时间】:2016-08-08 14:47:15
【问题描述】:
我有以下查询
SELECT ID FROM MARMELADES mrm
where not exists
(SELECT 1 FROM TOYS toys
WHERE mrm.ID = toys.ID
AND mrm.INGREDIENT = toys.INGREDIENT
AND mrm.BOX_TYPE = 2)
AND mrm.BOX_TYPE = 2
它返回近 400+ 个 id 结果,例如[12, 33, 45, ... , 3405]
现在,我想从我的数据库中删除该列表中所有位置的所有 id。这不仅是 MARMELADES 和玩具。此外,例如,我有 35 多个表,我可以在其中拥有此 ID)。
如果这个查询可以提取一些函数,比如 ALL_UNNEEDED_IDS,我会很高兴,这样我就可以像这样使用它:
DELETE FROM ANOTHER_TABLE_1 WHERE ID IN ( ALL_UNNEEDED_IDS )
DELETE FROM ANOTHER_TABLE_2 WHERE ID IN ( ALL_UNNEEDED_IDS )
DELETE FROM ANOTHER_TABLE_3 WHERE ID IN ( ALL_UNNEEDED_IDS )
DELETE FROM ANOTHER_TABLE_4 WHERE ID IN ( ALL_UNNEEDED_IDS )
...
DELETE FROM ANOTHER_TABLE_35 WHERE ID IN ( ALL_UNNEEDED_IDS )
在oracle中是否可以重用这样的结果?
【问题讨论】:
-
创建一个临时表并将不需要的 id 存储在那里。
-
如果所有这些表都通过此 ID 作为 FK 关联,听起来您应该将它们配置为级联删除。否则,将查询结果插入临时表,然后从所有删除调用中引用它。
-
使用@MathewsMathai 提到的Oracle 解决方案,您甚至不需要创建新类型。您可以使用现有的 Oracle 类型,例如
KU$_OBJNUMSET。