删除同一个表中的语句

Sha*_*500 16 mysql

我需要根据相关子查询的同一个表中的列条件查询同一个表的delete语句.

我无法直接运行delete语句并检查mysql中相同子表的相同子表的条件.

我想知道使用临时表是否会影响mysql的内存/性能?

任何帮助将受到高度赞赏.

谢谢.

Ada*_*ane 29

您可以通过将"where"查询作为内联来自表来使mysql为您执行临时表.

这个原始查询将为您提供可怕的"您无法在FROM子句中指定更新目标表":

DELETE FROM sametable
WHERE id IN (
    SELECT id FROM sametable WHERE stuff=true
)
Run Code Online (Sandbox Code Playgroud)

重写它以使用内联临时变为......

DELETE FROM sametable
WHERE id IN (
 SELECT implicitTemp.id from (SELECT id FROM sametable WHERE stuff=true) implicitTemp
)
Run Code Online (Sandbox Code Playgroud)


Bil*_*win 16

你的问题真的不清楚,但我猜你有一个相关的子查询,你在从DELETE锁定的同一个表中做一个SELECT时遇到了麻烦.例如,删除除文档的最新版本之外的所有版本:

DELETE FROM document_revisions d1 WHERE edit_date < 
  (SELECT MAX(edit_date) FROM document_revisions d2 
   WHERE d2.document_id = d1.document_id);
Run Code Online (Sandbox Code Playgroud)

这是MySQL的问题.

使用MySQL多表删除语法可以解决这些类型问题的许多示例:

DELETE d1 FROM document_revisions d1 JOIN document_revisions d2 
  ON d1.document_id = d2.document_id AND d1.edit_date < d2.edit_date;
Run Code Online (Sandbox Code Playgroud)

但这些解决方案最好是根据具体情况进行设计,因此如果您编辑问题并更具体地了解您要解决的问题,也许我们可以帮助您.

在其他情况下,您可能是对的,使用临时表是最简单的解决方案.