MySQL:使用同一个表从上一个查询的结果中删除

MySQL:使用同一个表从上一个查询的结果中删除,mysql,Mysql,我在尝试执行此查询时出错,因为MySQL意识到我试图通过来自同一个表上的联接的一组结果删除一些记录 如何重写查询 DELETE FROM hr_descr2 WHERE id IN (SELECT a.id FROM hr_descr2 a, hyperreview_descr b WHERE a.titolo = b.titolo AND a.recensione != b.re

我在尝试执行此查询时出错,因为MySQL意识到我试图通过来自同一个表上的联接的一组结果删除一些记录

如何重写查询

DELETE FROM hr_descr2 
WHERE
    id IN (SELECT 
        a.id
    FROM
        hr_descr2 a,
        hyperreview_descr b    
    WHERE
        a.titolo = b.titolo
        AND a.recensione != b.recensione
        AND a.recensione != ''
        AND b.recensione != ''
        AND ABS(LENGTH(a.recensione) - LENGTH(b.recensione)) > 40);
我也尝试过用这种方式重写查询,但不起作用:

WITH temp AS(SELECT 
        a.id
    FROM
        hr_descr2 a,
        hyperreview_descr b    
    WHERE
        a.titolo = b.titolo
        AND a.recensione != b.recensione
        AND a.recensione != ''
        AND b.recensione != ''
        AND ABS(LENGTH(a.recensione) - LENGTH(b.recensione)) > 40)
DELETE FROM hr_descr2 
WHERE
    id IN (select id from temp);

首先,我认为MySQL不支持CTE,因此with在语法上不正确

我还没试过,但我觉得这样应该行吗

DELETE hr_descr2 
FROM hr_descr2 a,
    hyperreview_descr b    
WHERE
    a.titolo = b.titolo
    AND a.recensione != b.recensione
    AND a.recensione != ''
    AND b.recensione != ''
    AND ABS(LENGTH(a.recensione) - LENGTH(b.recensione)) > 40);
相反,你可以使用

DELETE a FROM
    hr_descr2 a,
    hyperreview_descr b    
WHERE
    a.titolo = b.titolo
    AND a.recensione != b.recensione
    AND a.recensione != ''
    AND b.recensione != ''
    AND ABS(LENGTH(a.recensione) - LENGTH(b.recensione)) > 40

是的,它支持他们。。CTE是一个特定于microsoft的名称,Oracle也支持CTE,但他们用另一个名称来称呼它们。@您运行的是哪个版本的mysql?5如果我没有错的话。。但是CTE只与mysql I中的selects一起工作think@Revious我敢肯定MySQL不支持使用<>代码> />代码(或者根本不考虑子选择)的CTE。至少在5.5.35中没有。另外,我不是专家,但我认为CTE是一个常用的名称,不是MS或SQL Server特有的名称。真丢脸。。对不起,我真的很确定+我向你道歉