Не могу указать целевую таблицу для обновления, удалить запрос в MySQL - PullRequest
1 голос
/ 10 ноября 2011

Я хочу сделать то, что похоже на простое удаление в MySQL, но у меня возникли некоторые проблемы.Я хочу сделать это:

delete from table where col_name not in (select distinct col_name from table);

Эта таблица не имеет уникального ключа.Когда я пытаюсь это сделать, я получаю сообщение об ошибке:

Вы не можете указать таблицу назначения для обновления в предложении from;ErrorNr.1093

mysql community 5.1

Есть ли способ сохранить результаты этого запроса ->

select distinct col_name from table;

в temp.таблицу и использовать его в запросе на удаление?

Ответы [ 2 ]

3 голосов
/ 10 ноября 2011

Вы должны использовать псевдоним.

delete from table where col_name not in (select a.col_name from (select distinct col_name from table) a);

Это должно работать.

Редактировать: извините, я неправильно понял вопрос, и сосредоточиться только на ошибке SQL.Проблема, связанная с удалением повторяющейся строки без уникального ключа, не решена с помощью вышеуказанного запроса.

0 голосов
/ 22 февраля 2014

неправильный ответ @Molochdaa

Объяснение.Предположим, что это таблица

col_name |  value
------------------
east     |  10
west     |  15
east     |  10
west     |  15
north    |  5
east     |  10
north    |  5

, которая позволяет выбрать отдельное имя col_name из имени таблицы:

col_name
------------------
east     
west     
north    

теперь, когда вы пишете delete from table where col_name not in ( ... ), строка не будет возвращена, так как каждый столбец находится в возвращаемомlist

Правильный ответ будет (предложенный @jeffery_the_wind)

delete from table where col_name in (
   select a.col_name from (
      select col_name from table group by col_name having count(*)>1
   ) a
)

Другой, более простой ответ

delete from table_name
       where rowid not in ( select min(rowid) 
                            from Table_name
                            group by column1..,column2,...column3..)
...