我尝试将 bbPress 1.0 安装迁移到我的 WordPress 上新的 bbPress 2.0 插件时没有成功,这让我的 wp_posts
表变得一团糟。
我通过删除所有携带值 topic
和 reply
到 post_type
列的帖子来解决这个问题,这很好。
但现在我注意到 wp_postmeta
似乎受到许多引用我已删除帖子的条目的影响。两个表都有 post_id
列。
问题是:我使用哪个 SQL 命令删除 wp_postmeta
上不再存在于 wp_posts
上的引用行的值?我知道这是我应该使用的某种联接,但我不知道查找不存在的内容并将其删除会怎样。
PS:WordPress 表不保持参照完整性是怎么回事?我很确定在删除 wp_posts
上的相关内容时,可以从 wp_postmeta
中自动删除一些内容。好吧……
最佳答案
从表 a 中手动删除在表 b 中没有匹配的行的一般方法是:
DELETE FROM table_a WHERE some_id NOT IN (SELECT some_id FROM table_b);
这可能不是进行批量删除的最有效方法(连接可能会更快),但在这种情况下我通常更喜欢子选择,它更容易理解,因此降低了 FUBAR 概率(你不' 想不小心删除 table_b 等中的行)
所以在你的情况下你可能会做这样的事情:
SELECT * FROM wp_postmeta WHERE post_id NOT IN (SELECT post_id FROM wp_posts);
如果您确定这些是您要删除的行,请将 SELECT * 替换为 DELETE:
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT post_id FROM wp_posts);
关于mysql - 如何在另一个表中缺少值后清理表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6400340/