Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob / 25 сообщений из 31, страница 1 из 2
20.06.2016, 15:14
    #39258918
sergey113
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
Из базы данных в формате 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
20.06.2016, 15:20
    #39258933
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
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
20.06.2016, 15:20
    #39258934
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
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
20.06.2016, 15:27
    #39258941
sergey113
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
Мимопроходящий,

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

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

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

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

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

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

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

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

fireberd видимо страдает тем же гемороем.
...
Рейтинг: 0 / 0
20.06.2016, 15:56
    #39258971
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
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
20.06.2016, 15:58
    #39258973
sergey113
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
...
Рейтинг: 0 / 0
20.06.2016, 16:00
    #39258977
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
sergey113,

нет геморрой проявляется только у того кто не понимает что такое NULL. А в Оракл геморрой проявляется с утроенной силой при попытке разработки приложения работающего более чем с одной СУБД.
...
Рейтинг: 0 / 0
20.06.2016, 16:03
    #39258979
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
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
20.06.2016, 16:16
    #39258987
sergey113
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
Я не любитель намеков и многозначительных фраз. Поэтому указал ссылку, чтобы другой человек, который столкнется с таким вопросом смог более оперативно получить подсказку.
Ответ на мой вопрос в том, что 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
20.06.2016, 16:20
    #39258992
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
sergey113,

хватит писать бред. Предикаты IS NULL и IS NOT NULL всегда однозначны и могут вернуть только TRUE и FALSE.
И насколько мне известно Postgres работает с NULL согласно стандарту, т.е. точно так же как Firebird.
...
Рейтинг: 0 / 0
20.06.2016, 16:21
    #39258993
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
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
20.06.2016, 16:23
    #39258996
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
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
20.06.2016, 16:30
    #39259001
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
МимопроходящийSergey113> Ну и я не согласен с логикой firebird
> NULL or true = true
> это не правильно.
читай ещё раз статью, тынц на которую ты привёл.

NULL or true = NULL


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

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

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

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

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

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

Пропустил Ваш пост. Одновременно писал свой.
Спасибо за совет. Я так делать не буду. Лучше разобью на 2 шага и буду использовать конструкции максимально простые. Так будет меньше вероятность ошибки.
...
Рейтинг: 0 / 0
20.06.2016, 16:51
    #39259035
fb user
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
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
20.06.2016, 16:53
    #39259037
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
sergey113,

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

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

научись переводить свои формулировки в язык логики. Говоришь заполнены поля дня рождения и телефон, а в запросе пишешь OR.
...
Рейтинг: 0 / 0
20.06.2016, 17:39
    #39259087
sergey113
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob
Согласен с критикой. Мысли излагаю часто криво, потому что мыслю так.
Спасибо за помощь. Куда мне двигаться понял. Единственное, что на данный момент нужно освосить isql. Если не найди в нете создам отдельную тему.
Спасибо за помощь.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Исключение из запроса полей с нулевым знаечением - некорректный результат? ubunu+flamerob / 25 сообщений из 31, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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