【问题标题】:MySQL delete all rows with abandoned IDsMySQL删除所有具有废弃ID的行
【发布时间】:2013-09-09 18:19:59
【问题描述】:

在我的数据库中,我有三个表:一个包含单词(word_id,word),另一个列出类别(cat_id,cat_name),第三个将类别分配给所有单词(word_id,cat_id)(每个单词一个或多个类别) .

是否可以删除 categories-to-words-table 中 word_id 当前不存在于 words 表中的所有行?

【问题讨论】:

  • 使用外键 (InnoDB) 和级联来防止这种情况在未来发生。除了下面介绍的NOT IN 解决方案之外,执行此操作的常用方法是使用LEFT JOIN,然后检查正确关系上的空(-> 缺失)值。

标签: mysql


【解决方案1】:

是的,使用这个:

DELETE FROM categories_to_words
WHERE word_id NOT IN (SELECT word_id FROM words);

有更有效的方法可以做到这一点,但这会奏效。

但是:您应该真的使用外键进行调查,因为如果您使用它们,就不会遇到像您现在正在解决的问题那样的问题。

【讨论】:

  • 工作正常!并感谢您的提示!我一定会调查的。
【解决方案2】:

最直接的方法是翻译你的句子:

delete from categories2words
    where word_id not in (select word_id from words);

【讨论】:

    【解决方案3】:

    试试这个:-

    Delete from categories2words
    where word_id not in (select word_id from words);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-28
      • 1970-01-01
      • 1970-01-01
      • 2015-04-02
      • 2015-05-18
      • 2020-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多