1

我有两张这样的桌子

  1. 单词(word_id,值);
  2. word_map(sno(auto_inc), wm_id, service_id, word_id, base_id, root_id);

    • 其中 sno 只是为了索引而自动递增。

    • wm_id 是每个服务唯一的实际 id,例如(serviceid,wm_id 一起形成一个唯一键)。

    • base_id 和 root_id 引用到 wm_id 即,我存储正在插入的新单词的相应 wm_id 的值。

我现在的要求是我想从该表中删除记录,其中表中不存在单词的 base_id 或 root_id

例如,

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

任何人都可以建议我解决问题的方法。

我尝试了什么:

我尝试使用 while 编写一个过程,其中有一个查询,例如,

从 words_map 中删除 base_id 不在(从 words_map 中选择 wm_id)或 root_id 不在(从 words_map 中选择 wm_id)但是使用这种嵌套查询在同一个表上删除/或更新是不可能的,所以我正在寻找另一种方式。

我怀疑的是:

  • 我想过将这些 wm_ids 读入一个数组,然后在此基础上一一删除,但我认为我们在存储过程中没有数组。

  • Cursor 是这种情况的替代方案吗?

  • 或针对此问题的任何其他最佳解决方案。

编辑 1:请通过此http://sqlfiddle.com/#!2/a4b6f/15获取清晰的实验数据

任何早期帮助将不胜感激

4

0 回答 0