我需要根据相关子查询的同一个表中的列条件查询同一个表的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)
但这些解决方案最好是根据具体情况进行设计,因此如果您编辑问题并更具体地了解您要解决的问题,也许我们可以帮助您.
在其他情况下,您可能是对的,使用临时表是最简单的解决方案.
归档时间: |
|
查看次数: |
19432 次 |
最近记录: |