我需要从表中删除某些行。必须删除哪些行是我通过查询找到的。但是,it appears that you cannot do both operations (select and delete) in the same query:
目前,您无法从中删除 表并从同一个表中选择 在子查询中。
所以我不能这样做:
DELETE
FROM telefono
WHERE telefono_id IN (
SELECT te.telefono_id
FROM telefono te
LEFT JOIN centro_telefono ce ON te.telefono_id=ce.telefono_id AND ce.telefono_id IS NOT NULL
LEFT JOIN contacto_telefono co ON te.telefono_id=co.telefono_id AND co.telefono_id IS NOT NULL
WHERE COALESCE(ce.telefono_id, co.telefono_id) IS NULL AND te.fecha_alta < DATE_SUB(NOW(), INTERVAL 1 DAY)
);
-- SQL Error (1093): You can't specify target table for update in FROM clause
如何在纯MySQL中实现此记录清理?
服务器运行MySQL 5.1.39。
答案 0 :(得分:1)
CREATE TEMPORARY TABLE tmptable
SELECT te.telefono_id
FROM telefono te
LEFT JOIN centro_telefono ce ON te.telefono_id=ce.telefono_id AND ce.telefono_id IS NOT NULL
LEFT JOIN contacto_telefono co ON te.telefono_id=co.telefono_id AND co.telefono_id IS NOT NULL
WHERE COALESCE(ce.telefono_id, co.telefono_id) IS NULL AND te.fecha_alta < DATE_SUB(NOW(), INTERVAL 1 DAY)
DELETE FROM telefono te
WHERE te.telefono_id IN (Select telefono_id from tmptable)
答案 1 :(得分:1)
尝试使用连接
执行delete语句DELETE te
FROM telefono as te
LEFT JOIN centro_telefono ce
ON te.telefono_id=ce.telefono_id AND ce.telefono_id IS NOT NULL
LEFT JOIN contacto_telefono co
ON te.telefono_id=co.telefono_id AND co.telefono_id IS NOT NULL
WHERE
COALESCE(ce.telefono_id, co.telefono_id) IS NULL
AND te.fecha_alta < DATE_SUB(NOW(), INTERVAL 1 DAY)
答案 2 :(得分:0)
使用UPDATE
标记要删除的行,然后DELETE
实际删除它们。
UPDATE telefono SET marker_column='DELETE ME!!!!' WHERE telefono_id IN (...);
DELETE FROM telefono WHERE marker_column='DELETE ME!!!!';