Удаление определенных значений MYSQL

Рейтинг: 0Ответов: 2Опубликовано: 05.02.2015

Доброго времени суток.

Столкнулся с проблемой - искал в гугле - не нашёл, скорее, из-за неправильной формулировки вопроса. Собственно сам вопрос.

Таблица на 1000 строк. Нужно отредактировать значение столбца "Описание".

В этом столбце хранятся текстовые значения: один, два, три, пять, сорок, девять.
Каким образом удалить СРАЗУ все значения из ВСЕХ СТРОК данного СТОЛБЦА, ЗА ИСКЛЮЧЕНИЕМ значений: два, девять?

Всем большое спасибо!

Ответы

▲ 2

UPDATE (название таблицы) SET (название столбца) = 0 WHERE (название столбца) != '2,9';

▲ 2

Могу вам только посочувствовать.

При построении баз данных есть такое понятие, как нормальные формы. При их игнорировании, операции выборки или изменения данных приводят к логическим ошибкам. Так вот, ваша база не удовлетворяется даже самой первой (базовой) нормальной форме, которая гласит: каждая ячейка содержит ровно одно логическое значение и больше ничего. А поскольку вы туда запихнули несколько логических значений, то и просто так манипулировать данными через SQL будет либо затруднительно, либо невозможно.

В данном случае надо будет cтроить достаточно сложный запрос, если вы хотите сделать это только через SQL или даже воспользоваться процедурным расширением SQL/PSM(хранимые процедуры mysql). Но лучше разбить его на три простых запроса. Но в этом случае я не могу гарантировать правильный результат, так как могут быть проблемы с подстроками искомых тегов.

UPDATE %Table% SET %Row% = 'два, девять' WHERE %Row% LIKE '%два%' AND %Row% LIKE '%девять%';
UPDATE %Table% SET %Row% = 'два' WHERE %Row% LIKE '%два%' AND %Row% NOT LIKE '%девять%';
UPDATE %Table% SET %Row% = 'девять' WHERE %Row% NOT LIKE '%два%' AND %Row% LIKE '%девять%';

P.S. основная проблема в данном варианте в том, что паттерн поиска %девять% так же подходит и для тегов "сорок девять", "девятьсот" и т.д. где есть упоминание девятки.