【问题标题】:MySQL: delete from the result of a previous query using the same tableMySQL:从使用同一表的先前查询的结果中删除
【发布时间】:2014-10-20 16:42:24
【问题描述】:

我在尝试执行此查询时遇到错误,因为 MySQL 意识到我正在尝试通过来自同一表上的 JOIN 的一组结果来删除一些记录。

如何重写查询?

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


    【解决方案1】:

    你可以使用

    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
    

    【讨论】:

      【解决方案2】:

      首先,我认为 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);
      

      【讨论】:

      • 是的,它支持它们.. CTE 是微软特有的名称,Oracle 也支持它们,但他们用另一个名称称呼它们。
      • @Revious 你运行的是什么版本的mysql?
      • 5 如果我没记错的话.. 但我认为 CTE 仅适用于 mysql 中的选择
      • @Revious,我很确定 MySQL 不支持使用 WITH 的 CTE(或者根本不支持,除非您考虑子选择)。至少在 5.5.35 中不会。另外,不是专家,但我认为 CTE 是一个常用名称,并非特定于 MS 或 SQL Server。
      • 对我感到羞耻..对不起,我真的很确定。 +1,我深表歉意
      猜你喜欢
      • 2019-05-26
      • 2021-07-31
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多