2013-09-09 7 views
1

У меня есть большая база данных с 300 000 строк (1,6 ГБ). Мне нужно, чтобы удалить их все, кроме тех, что имеет следующие особенности:Удалить все строки, кроме специфических

main_sec=118 
main_sec=Companies 
type=SWOT 

Вот код, который я подготовил, но так или иначе, это удаление всех строк таблицы:

DELETE FROM `swots` 
WHERE (main_sec <> '118') OR 
     (main_sec <> 'Companies') OR 
    (type <> 'SWOT'); 

Пожалуйста, помогите мне понять, где ошибка.

ответ

1

Было бы быстрее, чтобы вставить строки, которые вы хотите сохранить (при условии, что они меньше, то оставшиеся строки) в новой таблице как:

INSERT INTO main_sec_new 
SELECT 
    * 
FROM main_sec 
WHERE main_sec IN ('118','Companies') 
and type = 'SWOT' 

, а затем просто удалить старую таблицу

2
DELETE FROM `swots` 
WHERE main_sec not in ('118', 'Companies') 
and type <> 'SWOT' 
1

Попробуйте это:

DELETE FROM `swots` 
WHERE (main_sec not in ('118', 'Companies')) OR 
     (type <> 'SWOT'); 

Проблема заключается в том, что main_sec является всегда не равно одному из этих двух значений в данной записи. Таким образом, каждая запись соответствует условию where в вашей версии.

+0

Я думаю, что его 'AND' вместо' OR' – Stephan

+0

Спасибо за быстрый ответ. Строки, которые должны быть исключены из удаления, должны иметь ЛЮБОЕ из этих 3 условий, поэтому OR должна работать должным образом. Я попытаюсь опубликовать результат –

+0

У меня есть ошибка: # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' в строке 3 –