Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - [решено] Запрос с множеством невходящих

Ответить
Настройки темы
MySQL - [решено] Запрос с множеством невходящих

Аватара для blackeangel

Старожил


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

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


Изменения
Автор: blackeangel
Дата: 07-01-2017
Всем здрасьте.
Нужно как то написать запрос который будет выбирать все записи которые не содержат 45 перечисленных записей.
Where ([oboz] not like '%СБ') or ([oboz] not like '%ТУ') or ....И так 45 or'ов и так не работает.
Как правильно то?

Отправлено: 09:58, 07-01-2017

 

Ветеран


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

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


blackeangel, я не знаком с диалектом SQL в варианте MySQL, но попробуйте посмотреть, нет ли у него конструкции наподобие NOT IN с подзапросом.

Навскидку, скажем:
MySQL :: MySQL 5.7 Reference Manual :: 14.2.10.3 Subqueries with ANY, IN, or SOME
MySQL :: MySQL 5.7 Reference Manual :: 14.2.10.6 Subqueries with EXISTS or NOT EXISTS
(сразу говорю, что даже не разбирался, то ли это).

Отправлено: 11:32, 07-01-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для blackeangel

Старожил


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

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


Цитата Iska:
blackeangel, я не знаком с диалектом SQL в варианте MySQL, но попробуйте посмотреть, нет ли у него конструкции наподобие NOT IN с подзапросом.

Навскидку, скажем:
MySQL :: MySQL 5.7 Reference Manual :: 14.2.10.3 Subqueries with ANY, IN, or SOME
MySQL :: MySQL 5.7 Reference Manual :: 14.2.10.6 Subqueries with EXISTS or NOT EXISTS
(сразу говорю, что даже не разбирался, то ли это).
А просто SQL?
Мне вообще это для бейсика надо...

Может, я и не в ту сторону копаю. В общем мне надо выполнить запрос в котором отсеятся все значения на конце которых содержатся перечисленные сочетания букв.
То есть они не должны попасть.

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


Отправлено: 14:15, 07-01-2017 | #3


Ветеран


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

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


Что значит «просто 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 '(СБ|ТУ)$';
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:20, 07-01-2017 | #4


Аватара для 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


Ветеран


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

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


Цитата blackeangel:
Спасибо, теперь понял свою ошибку »
Хорошо. Только не надо цитировать всё сообщение целиком .

Цитата blackeangel:
И что обозначает $ в конце? »
Символ, обозначающий позицию регулярного выражения внутри текста/строки. В данном случае, «$» — в конце строки.
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:27, 09-01-2017 | #6


Аватара для blackeangel

Старожил


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

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


Iska, так будет правильно?
Код: Выделить весь код
...NOT REGEXP '(СБ|ТУ|РР|ИМ|ДИ...)$'

Отправлено: 23:41, 09-01-2017 | #7


Ветеран


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

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


blackeangel, да.
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:04, 10-01-2017 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - [решено] Запрос с множеством невходящих

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Active Directory в сети со множеством филиалов. IT_Sergei Microsoft Windows NT/2000/2003 2 05-10-2016 15:28
Сжатие диска/папки с множеством одинаковых файлов vasya00 Хочу все знать 17 23-02-2014 09:54
Прочее - Управление множеством однотипных программ Паркан Общий по Linux 3 25-03-2013 23:11
Аудиоплеер с множеством источников Tonny_Bennet Хочу все знать 5 13-08-2012 14:57
Ошибка - [решено] При входе в папку с множеством различных видеофайлов Barkass Microsoft Windows 2000/XP 4 07-05-2009 21:07




 
Переход