mysql - 如何在另一个表中缺少值后清理表?

标签 mysql sql wordpress join bbpress

我尝试将 bbPress 1.0 安装迁移到我的 WordPress 上新的 bbPress 2.0 插件时没有成功,这让我的 wp_posts 表变得一团糟。

我通过删除所有携带值 topicreplypost_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/

相关文章:

mysql - GAE Python 3.7 Standard 无法连接到 Cloud SQL 服务器

mysql - 如何结合左连接和减法?

php - 检索数据时出现 SQL 错误

java.sql.SQLException : Lock wait timeout exceeded; try restarting transaction exception occur in MYSQL 异常

sql - 将 ****** 值 '******' 转换为数据类型 ****** 时转换失败

mysql - 如何为不同类型的用户制作出价表结构

mysql - 在HDFS中使用sqoop导入数据beugs

php - 在 Woocommerce 3 中获取自定义订单项元数据

wordpress - 如何获取所有带有特色图片的WordPress帖子?

wordpress - WooCommerce - 将产品类别别名更改为商店基础