【问题标题】:Delete multiple rows in multiple table using INNER JOIN in mySQL 5 TABLES在 mySQL 5 TABLES 中使用 INNER JOIN 删除多个表中的多行
【发布时间】:2013-11-25 23:58:02
【问题描述】:

我想运行这个查询,但它不起作用。有 5 个表要删除。

terms hav 1 row
term_taxonomy hav 1 row
term_relationships hav 1 row
post hav 5 rows
postmeta hav 5 rows

结构遵循wordpress nav_menu

我想在我的 cms 中使用该结构。创建和检索都很好,但我不知道为什么删除语句不起作用...

查询返回 true,但行仍然存在。

这是查询:

$query = "DELETE t, tt, tr, p, m 
FROM terms AS t
INNER JOIN term_taxonomy AS tt ON t.term_id = tt.term_id
INNER JOIN term_relationships AS tr ON tt.term_taxonomy_id = tr.term_taxonomy_id
INNER JOIN post AS p ON tr.object_id = p.ID
INNER JOIN postmeta AS m ON m.object_id = p.ID
WHERE t.term_id = 1;"; 

【问题讨论】:

  • INNER JOIN postmeta AS m ON tr.object_id = p.ID 这不应该是INNER JOIN postmeta AS m ON m.object_id = p.ID 吗?
  • 是的,它应该是 m.object_id。
  • 我已经纠正了这个错误并运行了查询...仍然失败:(
  • 如果您将第一行从 DELETE .... 更改为 SELECT * FROM 您可以查看是否会使用查询删除任何内容 - 显然您不会,但是您可以从那里恢复.
  • 没有返回任何东西

标签: php mysql wordpress inner-join sql-delete


【解决方案1】:

在某些时候,您的INNER JOIN 条件会排除所有记录,因此不会删除任何内容。以下是你应该如何调试这样的事情:

DELETE语句更改为SELECT * FROMSELECT返回的记录是DELETE语句将被删除的记录。

从最基本的查询开始,慢慢添加你的JOINs

SELECT * FROM
FROM terms AS t
WHERE t.term_id = 1;

返回记录?好的。所以加回INNER JOIN term_taxonomy AS tt ON t.term_id = tt.term_id。再次工作?太好了,继续直到您的查询停止返回结果(或结果集明显不正确)。一旦结果消失,您就知道您添加的最后一个表没有要加入的记录,或者在这种情况下您的JOIN .. ON 条件不正确。

【讨论】:

  • +1 我正在写一个类似的答案。分解问题的好建议。请注意,对于可能没有匹配行的表,您还可以在 DELETE 中使用 OUTER JOIN
  • 感谢您的好主意。我将按照说明进行操作。并让你知道。谢谢OGHaza
  • 查询中有两个错误。 post 表是帖子,postmeta 中的列是 post_id 而不是 object_id
  • "DELETE t, tt, tr, p, m FROM terms AS t INNER JOIN term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN term_relationships AS tr ON tt.term_taxonomy_id = tr.term_taxonomy_id INNER加入帖子 AS p ON tr.object_id = p.ID INNER JOIN postmeta AS m ON m.post_id = p.ID WHERE t.term_id = 1;"
  • @user3034390 然后设法修复它?
猜你喜欢
  • 2016-08-06
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
  • 2011-05-29
  • 2023-04-07
  • 2018-03-07
相关资源
最近更新 更多