Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата Iska:
Что значит «просто SQL»? «Просто SQL» не бывает. Есть стандарт (точнее стандарты разных годов), есть производители ПО со своими продуктами, каждый из которых обладает своим диалектом SQL, каждый из которых поддерживает стандарт в той или иной степени.

Ваша ошибка в запросе вида:
Цитата blackeangel:
Where ([oboz] not like '%СБ') or ([oboz] not like '%ТУ') or ....И так 45 or'ов и так не работает. »
в следующем (оно таки работает, работает правильно, и именно так, как заказывали): Вы получаете набор записей, который не содержит в конце поля oboz символов СБ (на рисунке — зелёный), затем получаете ещё один набор записей, который не содержит в конце поля oboz символов ТУ (на рисунке — синий), затем получаете ещё один набор записей, который не содержит в конце поля oboz символов … и так сорок пять раз. Затем наборы объединяются (OR). Таким образом, в результирующем наборе Вы получаете все записи таблицы (на рисунке — жёлтый):
Скрытый текст

Вам следует использовать либо такой синтаксис:
Код: Выделить весь код
SELECT * FROM myschema.sometable Where oboz not like '%СБ' and oboz not like '%ТУ';
либо такой:
Код: Выделить весь код
SELECT * FROM myschema.sometable Where not (oboz like '%СБ' or oboz like '%ТУ');
Скрытый текст


Но самым правильным будет использование оператора REGEXP:
Код: Выделить весь код
SELECT * FROM myschema.sometable WHERE oboz NOT REGEXP '(СБ|ТУ)$';
Спасибо, теперь понял свою ошибку
И что обозначает $ в конце?

Последний раз редактировалось blackeangel, 08-01-2017 в 23:32.


Отправлено: 19:02, 08-01-2017 | #5