2016-12-12 7 views
0

У меня есть запрос на удаление, который должен удалить все записи, которые не соответствуют 01 или 10. Эти два числа находятся перед словом, разделенным тире. Это выглядит так:SQL как% delete records?

Column_1 
01-Test1 
01-Test2 
10-Test3 
10-Test4 

Мой запрос должен удалить все записи, которые не соответствуют 01 и 10 перед словом. Вот мой запрос:

DELETE FROM MyRecords 
WHERE Column_1 NOT LIKE '01%' OR Column_1 NOT LIKE '10%' 

По какой-либо причине вышеприведенный запрос удаляет все записи из списка выше. Я не уверен, где я пропустил что-то, что удаляет все записи. Если кто-нибудь увидит проблему, пожалуйста, дайте мне знать. Спасибо.

ответ

5

Измените ваши ИЛИ к И

DELETE FROM MyRecords 
WHERE Column_1 NOT LIKE '01%' AND Column_1 NOT LIKE '10%' 

Другой вариант

DELETE FROM MyRecords 
WHERE Left(Column_1,2) NOT IN ('01','10') 

(Чуть более читаемым, но не будет использовать индекс)

0

Сначала определить, какие записи вы хотите сохранить ('01% '& '10%'),

Select * MyRecords WHERE (Column_1 LIKE '01%' OR Column_1 LIKE '10%'); 

затем установите NOT перед условиями и измените его на удаление.

DELETE FROM MyRecords WHERE NOT (Column_1 LIKE '01%' OR Column_1 LIKE '10%'); 

Это позволяет очень легко проверить, какие записи вы собираетесь удалить.

+0

Было бы неплохо, если бы вы могли объяснить, почему ваш код решает проблему OP. Ответ на код может быть удален в очередях просмотра. Благодаря! –