对于相关子查询,我需要根据同一表中的列条件查询同一表的delete语句。
我不能直接运行一条delete语句,并在mysql中为相关子查询检查同一个表的条件。
我想知道使用临时表是否会影响mysql的内存/性能?
任何帮助都将受到高度的感谢。
谢谢。
发布于 2010-07-28 01:26:36
您的问题真的不清楚,但我猜您有一个相关子查询,并且您在从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);这对MySQL来说是个问题。
使用MySQL多表delete语法可以解决这些类型问题的许多示例:
DELETE d1 FROM document_revisions d1 JOIN document_revisions d2
ON d1.document_id = d2.document_id AND d1.edit_date < d2.edit_date;但这些解决方案是根据具体情况设计的,因此,如果您编辑您的问题,并更具体地说明您试图解决的问题,也许我们可以帮助您。
在其他情况下,您可能是对的,使用临时表是最简单的解决方案。
发布于 2013-08-23 03:46:17
您可以通过将"where“查询包装为内联from表,让mysql为您创建临时表。
这个原始的查询会给你一个可怕的“你不能在FROM子句中指定用于更新的目标表”:
DELETE FROM sametable
WHERE id IN (
SELECT id FROM sametable WHERE stuff=true
)重写它以使用内联temp变得...
DELETE FROM sametable
WHERE id IN (
SELECT implicitTemp.id from (SELECT id FROM sametable WHERE stuff=true) implicitTemp
)发布于 2010-07-28 01:19:12
使用要删除的值创建临时表,然后在删除时将其联接到表中。在本例中,我有一个带有ID列的表“Game”。我将删除大于3的in。我将首先在临时表中收集目标,以便稍后报告它们。
DECLARE @DeletedRows TABLE (ID int)
insert
@DeletedRows
(ID)
select
ID
from
Games
where
ID > 3
DELETE
Games
from
Games g
join
@DeletedRows x
on x.ID = g.ID https://stackoverflow.com/questions/3346068
复制相似问题