2013-07-15 3 views
1

У меня есть таблица отзывов, которая содержит отзывы пользователей и рейтинги в соответствии с некоторыми объектами. Бывают случаи, когда несколько пользователей проголосовали за тот же объект, который нежелателен, и вошли в систему из-за сбоя.Как выбрать сложные данные из таблицы и удалить ее из той же таблицы

Схема таблицы примерно так:

qa_id,int(10) //id of the entity 
score,smallint(1) 
user_id,int(3) 
feed_time,datetime 

Я пытался удалить одну из повторяющихся записей (к счастью, есть только одна дополнительная обратная связь) с этим запросом:

delete from feedback where md5(qa_id+feed_time) in 
(
    select md5(qa_id+feed_time)from feedback fb 
    group by fb.qa_id 
    having count(fb.qa_id) > 1 
    order by fb.qa_id 
    desc 
) 

It не отвечает:

Error Code : 1093 
You can't specify target table 'feedback' for update in FROM clause 
(0 ms taken) 

, что я не могу выбрать и удалить из той же таблицы (т. е. если это появляется в подзапросе). У меня нет большого опыта в базах данных, и я не могу использовать какой-либо язык программирования для этого. ? :(

Любые предложения о том, как я могу сделать это с помощью запросов только

+0

Checkout из ссылка позже в этом комментарии, он дает вам ответ. Является ли ваша таблица innodb или MySIAM? http://stactkoverflow.com/questions/10554627/delete-from-having-count-in-mysql –

+0

@Yoram Моя таблица InnoDB –

+0

Oke, просто проверяя, потому что mysiam блокирует таблицу при вставке, обновлении или удалении и т. Д., Но это также невозможно сделать. ссылка :) –

ответ

3

Самый простой способ исправить это в MySQL, чтобы положить подзапрос в дополнительном слое подзапроса:

delete from feedback 
where md5(qa_id+feed_time) in (select * 
           from (select md5(qa_id+feed_time) 
            from feedback fb 
            group by fb.qa_id 
            having count(fb.qa_id) > 1 
            ) t 
          ) 
+0

LOL ... какое колдовство это !! ?? Окунитесь в MySQL. : D –

+2

@RickeshJohn. , , Дополнительный уровень подзапроса заставит MySQL создать экземпляр таблицы (или, по крайней мере, для компилятора, чтобы понять, что эта таблица создана, минуя предупреждение). –

Смежные вопросы