powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / WHERE Field <> 1 и значение NULL
31 сообщений из 31, показаны все 2 страниц
WHERE Field <> 1 и значение NULL
    #38977269
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть запрос
Код: sql
1.
SELECT NAME FROM REGIONS WHERE SKIP <> 1


поле SKIP может иметь три значения: 1, 0 и NULL
Так вот, в результат попадают только те записи, у которых SKIP имеет значение 0.
Но ведь NULL тоже не равно 1?
т.е. в таких случая обязательно дописывать "or skip is null"

Firebird 2.5.4
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38977285
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38977294
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
X11есть запрос
Код: sql
1.
SELECT NAME FROM REGIONS WHERE SKIP <> 1


поле SKIP может иметь три значения: 1, 0 и NULL
Так вот, в результат попадают только те записи, у которых SKIP имеет значение 0.
Но ведь NULL тоже не равно 1?
т.е. в таких случая обязательно дописывать "or skip is null"

Firebird 2.5.4
(SKIP <> 1) это null, при SKIP = null. Такова логика sql-серверов.
"SKIP integer not null default 0", если можно, и эта проблема уйдёт. Хотя в триггере лучше - там можно автоматом null на 0 менять.
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38977302
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38977342
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

Код: sql
1.
SELECT NAME FROM REGIONS WHERE SKIP is distinct from 1


Сравнение с учетом null
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38977350
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О!
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38978065
Dmitriy_3206
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11,

SELECT NAME FROM REGIONS WHERE coalesce(SKIP,2) <> 1
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38978380
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нужно сравнить планы, что работает быстрее и использует индексы
но первый вариант читабельнее
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38980293
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Первый вариант какая-то хитромудрая магия, второй намного нагляднее имхо
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38980295
Kirill Razuvaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-BrutalПервый вариант какая-то хитромудрая магия, второй намного нагляднее имхоТолько возникает немой вопрос, почему константа именно 2 :-)
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38980329
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наоборот
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38981020
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT NAME FROM REGIONS WHERE coalesce(SKIP,2) <> 1
SELECT NAME FROM REGIONS WHERE SKIP is distinct from 1

ни первый, ни второй вариант индексы не используют
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38981024
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неправильно.
Проблема в том, что в кляузе WHERE Ещё присутствует lower(NAME)
поэтому индексы и не используются :(
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38981028
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11в кляузе WHERE Ещё присутствует lower(NAME)
Case-insensitive collation? Не, не слышал...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38981495
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11ни первый, ни второй вариант индексы не используют
А field <> ... вообще когда-либо использует индекс? (риторический вопрос)
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38981862
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovCase-insensitive collation

http://www.destructor.de/firebird/caseinsensitivesearch.htm you can use a new Case Insensitive Collation named UNICODE_CI for the UTF8 character set (Unicode).

у меня Win1251
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38981964
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11у меня Win1251
CREATE COLLATION
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38981994
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда мне нужно полностью "переделывать" столбец и "переливать" данные из старого в новый?
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38981996
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на сколько я понял, то "case insensitive" только для UTF8
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38982083
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

PXW_CYRL

если мне память не отшибло
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38982087
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
когда это PXW_CYRL вдруг стал регистронезависимым?
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38982116
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11когда это PXW_CYRL вдруг стал регистронезависимым?
От самого начала.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38982129
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11когда это PXW_CYRL вдруг стал регистронезависимым?
Ну значит память отшибло
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38982147
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovX11когда это PXW_CYRL вдруг стал регистронезависимым?
От самого начала.


только для сортировки, но не для сравнения
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38982178
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал так
Код: sql
1.
DROP COLLATION NOCASE_COLL;


Код: sql
1.
CREATE COLLATION NOCASE_COLL FOR WIN1251 FROM PXW_CYRL CASE INSENSITIVE;




запрос
SELECT FIRST 1 ID FROM REGIONS WHERE NAME COLLATE NOCASE_COLL = :SNAME AND SKIP IS DISTINCT FROM 1[/SRC]

2 проблемы:
1. PLAN (REGIONS NATURAL)
2. результат = NULL
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38982191
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изменил COLLATE непосредственно у колонки NAME в таблице на NOCASE_COLL

выполнил запрос
Код: sql
1.
SELECT FIRST 1 ID FROM REGIONS WHERE NAME = :SNAME AND SKIP IS DISTINCT FROM 1


что изменилось изменилось:
1. PLAN (REGIONS INDEX (REDIONS_NAME_IDX1)) - уже индекс используется
2. но результат всё равно = NULL
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38982192
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Тогда мне нужно полностью "переделывать" столбец и "переливать" данные из старого в новый?
Варианты
1. Переделывать. Новый - перезилив - "переименование".
2. Если очень нужно, то материализовать столбец с нужной кодировкой и коллейтом с помощью триггера. (Это если индекс по функции не помог)
3. Если ширина выборки не радует, то денормализация - связки 1 к 1, и уже там шерстить
4. Если это ключевой момент системы и нужна адекватная скорость, то искать внешние системы и т.д.
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38982208
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Изменил COLLATE непосредственно у колонки NAME в таблице на NOCASE_COLL
Так и надо. Применение коллейта на ходу, как использование функции. В индексе то всё по-старому.

X111. PLAN (REGIONS INDEX (REDIONS_NAME_IDX1)) - уже индекс используется
2. но результат всё равно = NULL
Результат от индекса зависеть не должен. Индекс - внутренний механизм обеспечения выполнения запроса.
Такой запрос выдаёт данные?
Код: sql
1.
SELECT FIRST 1 ID FROM REGIONS WHERE upper(NAME) = upper(:SNAME) AND SKIP IS DISTINCT FROM 1
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38982219
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Изменил COLLATE непосредственно у колонки NAME в таблице на NOCASE_COLL
А индекс после этого ты пересоздал?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38982269
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovX11Изменил COLLATE непосредственно у колонки NAME в таблице на NOCASE_COLL
А индекс после этого ты пересоздал?


Я не знал, что нужно пересоздавать индекс.
Пересоздал.
проверил запрос. Всё равно NULL

вот доказательство

"Город" есть



ищу "город"


результат null
...
Рейтинг: 0 / 0
WHERE Field <> 1 и значение NULL
    #38982288
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скрипт

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE REGIONS (
    ID                  "INT" NOT NULL /* "INT" = INTEGER */,
    PARENT              "INT" NOT NULL /* "INT" = INTEGER */,
    NAME                STRING50 NOT NULL COLLATE NOCASE_COLL /* STRING50 = VARCHAR(50) */,
    CCOUNT              "INT" DEFAULT 0 NOT NULL /* "INT" = INTEGER */,
    SORTINDEX           "INT" DEFAULT 0 NOT NULL /* "INT" = INTEGER */,
    IMAGEINDEX          "INT" DEFAULT -1 NOT NULL /* "INT" = INTEGER */,
    STATEINDEX          "INT" DEFAULT -1 NOT NULL /* "INT" = INTEGER */,
    FULLPATH            STRING255 NOT NULL COLLATE PXW_CYRL /* STRING255 = VARCHAR(255) */,
    SKIP FIB$BOOLEAN /* FIB$BOOLEAN = SMALLINT DEFAULT 0 NOT NULL CHECK (VALUE IN (0,1,NULL)) */
);
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / WHERE Field <> 1 и значение NULL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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