MySQL DELETE с подзапросом, использующим Have и Count - PullRequest
4 голосов
/ 08 февраля 2011

Я пытаюсь УДАЛИТЬ несколько записей, используя следующий запрос:

Сначала я нахожу записи, которые хочу удалить, используя этот запрос:

SELECT guid FROM account GROUP BY guid,type HAVING count(type) > 1);

Затем я добавляю этот запрос в оператор DELETE:

DELETE FROM account WHERE guid IN (SELECT guid FROM account GROUP BY guid,type HAVING count(type) > 1);

Но я получаю эту ошибку:

Вы не можете указать целевую таблицу 'account' для обновления в предложении FROM

Ответы [ 3 ]

1 голос
/ 28 ноября 2012

Я думаю, что вам нужно использовать временную таблицу для достижения ваших потребностей, как показано ниже:

  1. Шаг 1: Создать временную таблицу

    CREATE TEMPORARY TABLE MyTemp
    SELECT guid FROM account 
    GROUP BY guid,type HAVING count(type) > 1;
    
  2. Используйте временную таблицу в операторе удаления

    DELETE FROM account 
    WHERE guid IN (SELECT guid FROM MyTemp);
    
  3. Удалите временную таблицу

    DROP TEMPORARY TABLE MyTemp;
    

РЕДАКТИРОВАТЬ: Я думаю, что обходной путь с * две вложенные таблицы также работает:

  DELETE FROM account 
    WHERE guid IN 
     (SELECT guid FROM 
       (SELECT guid FROM account 
       GROUP BY guid,type HAVING count(type) > 1) as MyTemp
    )
0 голосов
/ 02 декабря 2013

Ваша проблема решена, просто сделайте следующее.

    DELETE FROM account 

      WHERE guid IN 

     (SELECT * FROM 

       (SELECT guid FROM account 

          GROUP BY guid,type 

          HAVING  count(type) > 1) AS a);
0 голосов
/ 08 февраля 2011

Первое создание представления

create view view_acct as 
SELECT guid FROM account 
GROUP BY guid,type HAVING count(type) > 1;

Вид после использования

DELETE FROM account WHERE guid in (select * from view_acct);
...