MySQL:使用同一个表从上一个查询的结果中删除
我在尝试执行此查询时出错,因为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
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特有的名称。真丢脸。。对不起,我真的很确定+我向你道歉