2012-02-01 2 views
1

Я не могу построить запрос к mysql, чтобы удалить строки от 200 до конца.Как я могу условно удалить строки из таблицы, используя данные из одной таблицы в состоянии?

DELETE FROM `popular` 
WHERE NOT EXISTS(
SELECT * 
FROM `popular` 
ORDER BY `rank` DESC, `timestamp` DESC 
LIMIT 200 
) 

Поскольку ошибка - # 1093 - Вы не можете указать целевую таблицу «популярными» для обновления в ЕКЕ

+0

Как я думаю, вы должны перевести его на английский. – theWalker

+1

Приношу свои извинения, но Stack Overflow - это ресурс на английском языке, поэтому этот вопрос должен быть переведен на английский язык либо самим, либо кем-то другим. –

+0

Это один из многих недостатков MySQL в их реализации SQL. Вам нужно изменить его, чтобы вместо этого использовать соединение. –

ответ

1

Просто разделить его на два вызова: первый побегать выбрать и найти идентификаторы которые вы хотите удалить. затем скопируйте эти идентификаторы и используйте их в команде delete.

Если вы не хотите вручную добавлять запятые между идентификаторами, которые вы можете использовать «найти и заменить» в текстовой панели, или Excel может сделать это очень просто.

1

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

select @rownum:[email protected]+1 rownum, popular.* from (select @rownum:=0) r, popular order by rank desc, timestamp desc 
Смежные вопросы