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

时间:2013-05-10 10:41:28

标签: mysql stored-procedures

我有2张这样的表

  1. words(word_id,value);
  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的值。
  3. 我的要求现在是我要删除此表中的记录,其中表中不存在单词的base_id或root_id

    例如,

    一个新单词,其中tr_id = 4,其base_id = 2,root_id = 1则必须有两个其他记录,其中tr_id为s 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读成一个数组,然后一个一个地读取基于那个,但我不认为我们有存储的数组 程序

    • 光标是这种情境的替代方案。

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

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

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

0 个答案:

没有答案