powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
31 сообщений из 31, показаны все 2 страниц
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39258918
sergey113
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Из базы данных в формате gdb хочу сделать выборку клиентов у которых заполнены поля дня рождения и телефон.
Работаю на Ubuntu 16.04 64-bit использую flamerobin. Делаю запрос на выборку всех данных:
SELECT r.ID, r.FAM, r.IME, r.OTCH, r.ADRESS, r.DATE_BORN, r.TEL_MOB, r.GOROD, r.STREET, r.DOM, r.KORP, r.FLAT
FROM PACIENT r
Получается 10605 записей
Делаю запрос с исключением пустых полей
SELECT r.ID, r.FAM, r.IME, r.OTCH, r.ADRESS, r.DATE_BORN, r.TEL_MOB, r.GOROD, r.STREET, r.DOM, r.KORP, r.FLAT
FROM PACIENT r where r.DATE_BORN is not null or r.TEL_MOB is not null
Получается 9856 записей.
Но сразу бросилось в глаза что это не так. Проверяю по отдельности запросами вида
SELECT r.ID, r.FAM, r.IME, r.OTCH, r.ADRESS, r.DATE_BORN, r.TEL_MOB, r.GOROD, r.STREET, r.DOM, r.KORP, r.FLAT
FROM PACIENT r where r.DATE_BORN is null
и вижу, что по отдельности выбирает 3036 и 1573 записи. Ясно, что суммы не сходятся. А в чем тут подвох?
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39258933
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Sergey113!
You wrote on 20 июня 2016 г. 15:18:55:

Sergey113> Получается 9856 записей.
для подсчёта количества записей удовлетворяющих критериям используют
SELECT COUNT(*) FROM ... WHERE ...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39258934
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergey113,

в этом
Код: plaintext
1.
SELECT r.ID, r.FAM, r.IME, r.OTCH, r.ADRESS, r.DATE_BORN, r.TEL_MOB, r.GOROD, r.STREET, r.DOM, r.KORP, r.FLAT
FROM PACIENT r where r.DATE_BORN is null
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39258941
sergey113
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий,

Большое спасибо. Не знал. Выполнил с Вашим кодом и получил те же самые цифры.
Явно не сходятся результаты
Общее число записей = 10605
После фильтрации нулевых полей с оператором OR получается 9856. Разница 749 записей.

Должен исключить как минимум 3036+1573=4609 записей
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39258942
sergey113
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

Разве такая запись некорректна? Ее мне подсказывает сам построитель запроса в flamerobin. Что не так?
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39258948
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergey113,

1. подозрительно что вы вообще хотели это проверить
2. ну я как-то расcчитывал что вы not null хотите проверить, а не на оборот null :)
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39258958
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подвох в том, что эти множества -
r.DATE_BORN is null
и
r.TEL_MOB is null
могут пересекаться
причем вы сами их пересекаете. объединяя их по "ИЛИ" (OR)

сравните "Выбрать всех пациентов "не мужчин" или "не старых"
естественно, что туда могут попасть нестарые мужчины, или старые "не мужчины".

чтобы выбрать все записи без пустых полей, вам надо объединять эти множества по "И" - тогда вы получите записи, у которых И одно поле заполнено, и второе.
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39258959
sergey113
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

Я Вас не понял.
Сначала я выбираю то что хочу получить. Ну а потом для проверки инвертирую оператор чтобы посмотреть на самом ли деле выбрано правильно.

А ответ на мой ыопрос видимо в подобной ситуации как описано тут
https://habrahabr.ru/post/127327/

fireberd видимо страдает тем же гемороем.
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39258971
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Sergey113!
You wrote on 20 июня 2016 г. 15:52:53:

Sergey113> А ответ на мой ыопрос видимо в подобной ситуации как описано тут
> https://habrahabr.ru/post/127327/ КГ/АМ

зы: взрослые люди по хабрам не шастают!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39258973
sergey113
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39258977
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergey113,

нет геморрой проявляется только у того кто не понимает что такое NULL. А в Оракл геморрой проявляется с утроенной силой при попытке разработки приложения работающего более чем с одной СУБД.
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39258979
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Sergey113!
You wrote on 20 июня 2016 г. 16:01:35:

Sergey113> http://firebirdsql.org/manual/ru/nullguide-null-in-exps-ru.html это ты кому сейчас тынцнул?
все здесь присутствующие таки давно прошли КМБ.
видимо, кроме тебя.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39258987
sergey113
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я не любитель намеков и многозначительных фраз. Поэтому указал ссылку, чтобы другой человек, который столкнется с таким вопросом смог более оперативно получить подсказку.
Ответ на мой вопрос в том, что firebird обрабатывает null согласно этой таблице истинности.
авторNULL в логических выражениях

Мы уже рассмотрели, что not(NULL) дает в результате NULL. Для операторов and (логическое И) и or (логическое ИЛИ) взаимодействие несколько сложнее:

NULL or false = NULL

NULL or true = true

NULL or NULL = NULL

NULL and false = false

NULL and true = NULL

NULL and NULL = NULL

таким образом строка к которой поле дата рождения оказывалась NULL (дата рождения отсутствует), а номер телефона TRUE (т.е. not null - телефон есть) оказывалась TRUE. А я ожидал в этом случае FALSE.
Ну и я не согласен с логикой firebird NULL or true = true - это не правильно.
И как теперь пользоваться по нормальному оператором OR или AND ?
Разбивать на шаги, но это удар по автоматизации.

Postgres тоже таким страдает? Какая база данных работает с NULL как в булевой математике? Или нет таких?
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39258992
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergey113,

хватит писать бред. Предикаты IS NULL и IS NOT NULL всегда однозначны и могут вернуть только TRUE и FALSE.
И насколько мне известно Postgres работает с NULL согласно стандарту, т.е. точно так же как Firebird.
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39258993
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Sergey113!
You wrote on 20 июня 2016 г. 16:19:33:

Sergey113> Ну и я не согласен с логикой firebird
> NULL or true = true
> это не правильно.
читай ещё раз статью, тынц на которую ты привёл.

NULL or true = NULL
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39258996
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Симонов Денис!
You wrote on 20 июня 2016 г. 16:22:13:

Симонов Денис> И насколько мне известно Postgres работает с NULL согласно стандарту, т.е. точно так же как Firebird.
все RDBMS работают с NULL согласно стандарту.
отдельные "прыжки в сторону" есть у MSSQL и Oracle, но не в данном случае.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39259001
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МимопроходящийSergey113> Ну и я не согласен с логикой firebird
> NULL or true = true
> это не правильно.
читай ещё раз статью, тынц на которую ты привёл.

NULL or true = NULL


Да нет, тут как раз всё правильно
TRUE or NULL = TRUE

это легко выводится так

TRUE or (ХЗ, т.е. любое логическое значение) = TRUE
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39259002
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Симонов Денис!
You wrote on 20 июня 2016 г. 16:31:13:

Симонов Денис> Да нет, тут как раз всё правильно
> TRUE or NULL = TRUEа, тьфу, блин.
точно. чё-то меня торкнуло.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39259003
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МимопроходящийNULL or true = NULL
Чо?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39259009
sergey113
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий,

читай сам
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39259022
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Sergey113!
You wrote on 20 июня 2016 г. 16:43:42:

Sergey113> читай сами на старуху бывает проруха.
слушай что Денис говорит.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39259024
sergey113
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cobalt747,

Пропустил Ваш пост. Одновременно писал свой.
Спасибо за совет. Я так делать не буду. Лучше разобью на 2 шага и буду использовать конструкции максимально простые. Так будет меньше вероятность ошибки.
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39259035
fb user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sergey113Из базы данных в формате gdb хочу сделать выборку клиентов у которых заполнены поля дня рождения и телефон.
Работаю на Ubuntu 16.04 64-bit использую flamerobin. Делаю запрос на выборку всех данных:
SELECT r.ID, r.FAM, r.IME, r.OTCH, r.ADRESS, r.DATE_BORN, r.TEL_MOB, r.GOROD, r.STREET, r.DOM, r.KORP, r.FLAT
FROM PACIENT r
Получается 10605 записей
Делаю запрос с исключением пустых полей
SELECT r.ID, r.FAM, r.IME, r.OTCH, r.ADRESS, r.DATE_BORN, r.TEL_MOB, r.GOROD, r.STREET, r.DOM, r.KORP, r.FLAT
FROM PACIENT r where r.DATE_BORN is not null or r.TEL_MOB is not null
Получается 9856 записей.
Но сразу бросилось в глаза что это не так. Проверяю по отдельности запросами вида
SELECT r.ID, r.FAM, r.IME, r.OTCH, r.ADRESS, r.DATE_BORN, r.TEL_MOB, r.GOROD, r.STREET, r.DOM, r.KORP, r.FLAT
FROM PACIENT r where r.DATE_BORN is null
и вижу, что по отдельности выбирает 3036 и 1573 записи. Ясно, что суммы не сходятся. А в чем тут подвох?
r.DATE_BORN is not null: 10605-3036 записей.
r.TEL_MOB is not null: 10605-1573 записей.
r.DATE_BORN is not null or r.TEL_MOB is not null: от 10605-3036 до 10605 записей.
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39259037
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergey113,

а может быть стоит просто понять логику NULL и не надо будет 100500 лишних шагов делать?

sergey113Из базы данных в формате gdb хочу сделать выборку клиентов у которых заполнены поля дня рождения и телефон.

научись переводить свои формулировки в язык логики. Говоришь заполнены поля дня рождения и телефон, а в запросе пишешь OR.
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39259087
sergey113
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Согласен с критикой. Мысли излагаю часто криво, потому что мыслю так.
Спасибо за помощь. Куда мне двигаться понял. Единственное, что на данный момент нужно освосить isql. Если не найди в нете создам отдельную тему.
Спасибо за помощь.
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39259127
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergey113 сделать выборку клиентов у которых заполнены поля дня рождения и телефон.

Код: sql
1.
 where r.DATE_BORN is not null or r.TEL_MOB is not null


Хочется найти тех у кого заполнены одновременно день рождения и телефон,
а ищутся те у кого заполнены день рождения или телефон.
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39259138
sergey113
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
S.G.,

и это верно, но решение моего вопроса это пошаговый отбор данных, а еще лучше экспорт данных из firebird хотя бы в mysql. В mysql у меня все получиться (уже делал), а fireberd какашка. :)
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39259171
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergey113В mysql у меня все получиться (уже делал)
Врёшь. Синтаксис WHERE у них не отличается от слова "совсем".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39259174
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergey113В mysql у меня все получиться (уже делал)

Врёшь поди. Я конечно знаю что mysql одна из самых косячных СУБД, но в такие косяки верится с трудом. Может конечно в какой-нибудь древней версии.
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39259214
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergey113 а fireberd какашка. :)начни с того, чтобы искать косяки сначала в себе.
я серьезно.
...
Рейтинг: 0 / 0
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
    #39272829
Фотография alex_p_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergey113А в чем тут подвох?
По-моему в том, что хотим
sergey113 ...у которых заполнены поля дня рождения И телефон...
а в запроше пишем
sergey113 where r.DATE_BORN is not null OR r.TEL_MOB is not null
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]