Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Мистика SQL запроса / 7 сообщений из 7, страница 1 из 1
01.03.2014, 22:15:10
    #38576184
Vladimit04
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика SQL запроса
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
mysql> select guid from t1 where guid=245707;
+--------+
| guid   |
+--------+
| 245707 |
+--------+
1 row in set

mysql> select guid from t2 where guid=245707;
Empty set

mysql> select guid from t1 where guid not in (select guid from t2);
Empty set


Почему не может выбрать значение? Таблицы одинаковые. Колонки guid отличаются только тем, что t1 она unsigned и никаким образом это на результат влиять не должно. Или я слишком утомился, или пора начинать верить в компьютерных привидений.
...
Рейтинг: 0 / 0
01.03.2014, 22:33:47
    #38576187
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика SQL запроса
Не удается воспроизвести.
Покажите точный DDL таблиц.
...
Рейтинг: 0 / 0
04.03.2014, 09:08:44
    #38577417
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика SQL запроса
Vladimit04Почему не может выбрать значение? Таблицы одинаковые. Колонки guid отличаются только тем, что t1 она unsigned и никаким образом это на результат влиять не должно. Или я слишком утомился, или пора начинать верить в компьютерных привидений.Потому что (select guid from t2) возвращает NULL

А конструкция where a in (b,c,d) эквивалентна where a=b OR a=c OR a=d
Ну а сравнение с NULL общий результат всегда превращает в NULL
...
Рейтинг: 0 / 0
04.03.2014, 09:10:18
    #38577419
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика SQL запроса
Точно так же where a not in (b,c,d) => where not(a=b or a=c or a=d) => (b is null) => NULL
...
Рейтинг: 0 / 0
04.03.2014, 09:15:51
    #38577421
Мистика SQL запроса
Cygapb-007,

Небольшая поправочка...
Вот как раз упомянутый тобой IN - "нечувствителен" к NULL-ам, Так как NULL or TRUE - все же TRUE.
В отличии от NOT IN , который у автора и имеет место быть. ;) Он раскрывается в гирлянду неравенств через AND. И тут уже работает то, о чем ты сказал: (TRUE and NULL) = NULL
...
Рейтинг: 0 / 0
04.03.2014, 09:33:41
    #38577432
Мистика SQL запроса
Cygapb-007,

и ещё - EMPTY SET и NULL - это две большие разницы. И если NOT IN-подзапрос возвращает EMPTY SET, то запрос из основной таблицы с участием предиката NOT IN (empty set) возвращает все строки из основной таблицы...

Как пример иллюстрации всех трех ситуаций...
...
Рейтинг: 0 / 0
05.03.2014, 19:13:28
    #38579421
Vladimit04
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика SQL запроса
Блин, точно, спасибо большое пацаны! В таблицы t2 были guid с null значениями!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Мистика SQL запроса / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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