powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / IS NOT TRUE - как работает?
10 сообщений из 10, страница 1 из 1
IS NOT TRUE - как работает?
    #39172139
bober132
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Не могу разобраться с "IS NOT TRUE" - а точнее как оно отрабатывает.
В связи с этим не получается сделать правильный запрос к БД.

В данном примере всё отработало логично:
Код: sql
1.
2.
SELECT 2 IS NOT TRUE, 1 IS NOT TRUE, 0 IS NOT TRUE, NULL IS NOT TRUE;
-> 0,0,1,1



А это мой запрос:
Код: sql
1.
2.
SELECT f.not_use FROM excel as e LEFT JOIN flags as f USING(site,artic_new) WHERE f.not_use IS NOT TRUE GROUP BY f.not_use;
-> 0 


Тип поля f.not_use - tinyint, возможные значения - 1,0,NULL.
Здесь отсутствуют пустые значения (с NULL), не то что мне нужно.
Почему так?

P.S. Хотелось бы как нибудь обойтись без 'f.not_use = 0 OR f.not_use IS NULL'
...
Рейтинг: 0 / 0
IS NOT TRUE - как работает?
    #39172170
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bober132отсутствуют пустые значения (с NULL)
А так?
Код: sql
1.
WHERE (f.not_use IS NOT TRUE) = 1
...
Рейтинг: 0 / 0
IS NOT TRUE - как работает?
    #39172202
bober132
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
оба запроса отработали одинаково - 2360 строк(без группировки)
...
Рейтинг: 0 / 0
IS NOT TRUE - как работает?
    #39172212
bober132
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Доп. инфа:
Сервер: Localhost via UNIX socket(Debian 7.0)
Тип сервера: MariaDB
Версия сервера: 5.5.44-MariaDB-1~wheezy - mariadb.org binary distribution
Версия протокола: 10
Тип таблиц: InnoDB

P.S. с группировкой отработало так-же
...
Рейтинг: 0 / 0
IS NOT TRUE - как работает?
    #39172243
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тест-набор (CREATE TABLE + INSERT INTO) - обязательно проверенный!- и желаемый на этих данных результат в студию.
...
Рейтинг: 0 / 0
IS NOT TRUE - как работает?
    #39172306
bober132
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE `a` ( `not_use` BOOLEAN NOT NULL , `artic_new` VARCHAR(255) NOT NULL , `site` VARCHAR(255) NOT NULL ) ENGINE = InnoDB;
INSERT INTO `a` (`not_use`, `artic_new`, `site`) VALUES ('1', '111', '000.ru'), ('0', '222', '000.ru');
CREATE TABLE `b` ( `id` INT NOT NULL AUTO_INCREMENT , `artic_new` VARCHAR(255) NOT NULL , `site` VARCHAR(255) NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB;
INSERT INTO `b` (`id`, `artic_new`, `site`) VALUES (NULL, '111', '000.ru'), (NULL, '222', '000.ru') , (NULL, '333', '000.ru');

SELECT f.*,e.* FROM b as e LEFT JOIN a as f USING(site,artic_new) WHERE (f.not_use IS NOT TRUE) = 1;



результат - 1 строка:
not_use artic_new site id artic_new site
0 222 000.ru 2 222 000.ru
...
Рейтинг: 0 / 0
IS NOT TRUE - как работает?
    #39172310
bober132
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Желаемый результат:
not_use artic_new site id artic_new site
0 222 000.ru 2 222 000.ru
NULL NULL NULL 3 333 000.ru
...
Рейтинг: 0 / 0
IS NOT TRUE - как работает?
    #39172388
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что с NULL не делай (кроме IS [NOT] NULL, понятно) - получишь NULL. Который любое условие и любое выражение (не только логическое) превратит в NULL, интерпретируемый как FALSE.

Так что самое имхо разумное - это нечто вроде
Код: sql
1.
2.
3.
4.
5.
6.
SELECT f.*,e.* 
FROM b as e 
LEFT JOIN a as f 
  USING (site,artic_new) 
-- WHERE NOT COALESCE(f.not_use,0)
WHERE COALESCE(f.not_use,0) = 0;


Или, например, использовать альтернативно-эквивалентный вариант с использованием подзапроса и NOT IN или NOT EXISTS.
...
Рейтинг: 0 / 0
IS NOT TRUE - как работает?
    #39172784
bober132
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо помогло. Не думал что так геморно работать с NULL.
...
Рейтинг: 0 / 0
IS NOT TRUE - как работает?
    #39172792
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bober132Akina,

Желаемый результат:
not_use artic_new site id artic_new site
0 222 000.ru 2 222 000.ru
NULL NULL NULL 3 333 000.ru
Код: sql
1.
WHERE NOT f.not_use <=> TRUE

NULL-safe equal
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / IS NOT TRUE - как работает?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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