Mysql 如何迭代地从表中删除这些孤立记录?

Mysql 如何迭代地从表中删除这些孤立记录?,mysql,stored-procedures,Mysql,Stored Procedures,我有两张这样的桌子 wordid,值; word\u mapsnoauto\u inc,wm\u id,service\u id,word\u id,base\u id,root\u id 其中sno仅为索引而自动递增 wm_id是每个服务的唯一实际id,如 serviceid、wm_id一起构成一个唯一的密钥 base_id和root_id被引用到wm_id,即,我存储所插入新词的相应wm_id的值。 我现在的要求是我想从这个表中删除记录,其中,表中不存在单词的base\u id或root\u

我有两张这样的桌子

wordid,值; word\u mapsnoauto\u inc,wm\u id,service\u id,word\u id,base\u id,root\u id

其中sno仅为索引而自动递增

wm_id是每个服务的唯一实际id,如 serviceid、wm_id一起构成一个唯一的密钥

base_id和root_id被引用到wm_id,即,我存储所插入新词的相应wm_id的值。 我现在的要求是我想从这个表中删除记录,其中,表中不存在单词的base\u id或root\u id

比如说,

一个tr_id=4的新词,它的base_id=2,root_id=1,那么必须有另外两个tr_id为2和1的记录,如果没有,我们可以将其称为孤儿,并且必须删除wm_id=4的记录,然后还必须删除其他wm_id中有4作为base_id或root_id的记录,因为如果4被删除,它们现在也是孤儿,依此类推

谁能给我建议这个问题的解决办法吗

我尝试的是: 我试着用while编写一个过程,其中有一个查询

从words\u map中删除,其中base\u id不在words\u map中选择wm\u id或root\u id不在words\u map中选择wm\u id 但是使用这种嵌套查询删除/更新同一个表是不可能的,所以我正在寻找另一种方法

我怀疑的是: 我想把这些wm_ID读入一个数组,然后根据这个数组逐个删除,但我认为我们没有存储数组 程序

光标是这种情况的另一种选择

或任何其他解决此问题的最佳方案

编辑1:请仔细阅读,以获得清晰的实验数据


任何早期的帮助都将不胜感激

显示示例数据和愿望输出为什么用mysql和Oracle标记?您使用的是哪一个?无论dbms问题是什么,都是相同的,对吗?任何依赖项?请检查我更新的问题,其中我添加了SQLFIDLE和一些实验数据,或者单击此处