|
where not in (...) и NULL. Почему так?
|
|||
---|---|---|---|
#18+
dawв случае с NOT IN мы точно знаем, что один из результатов - нет, а вот при сравнении с NULL результат получается "неизвестно". поэтому, никаких оснований считать результат истинным нет. false AND unknown = unknown. Неверно, если тут не врут Код: sql 1.
т.е. должно выбраться Я к тому что троичная логика тут ни при чем. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2014, 12:38 |
|
where not in (...) и NULL. Почему так?
|
|||
---|---|---|---|
#18+
Dima T Код: sql 1.
т.е. должно выбраться А c чего вы IN() считаете последовательностью AND-ов ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2014, 12:43 |
|
where not in (...) и NULL. Почему так?
|
|||
---|---|---|---|
#18+
Dima TЯ к тому что троичная логика тут ни при чем.Ну да, совсем не при чем... in раскрывается как последовательность or. 2 in (1, 2, null) -> 1 = 2 or 2 = 2 or null = 2 -> false or true or unknown -> true or unknown -> true 3 not in (1, 2, null) -> not (1 = 3 or 2 = 3 or null = 3) -> not (false or false or unknown) -> not(false or unknown) -> not(unknown) -> unknown ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2014, 12:58 |
|
where not in (...) и NULL. Почему так?
|
|||
---|---|---|---|
#18+
Dima TПро троичную в курсе, но нестыковка получается: для выборки с IN, например 1 in (1, NULL) , два результата сравнения: есть и неизвестно - включаем 1 в результат. для выборки с NOT IN, например 2 not in (1, NULL) , два результата сравнения: нет и неизвестно - не включаем 2 в результат. Чем "есть" отличается "нет"? ИМХУ данное поведение просто кем-то надумано и заявлено как аксиома. нет, вы просто ошиблись в раскрытии IN и NOT IN 1 IN (1, NULL) = 1 IN (1) OR 1 IN (NULL) = TRUE OR UNKNOWN = TRUE 2 NOT IN (1, NULL) = (2 NOT IN (1)) AND (2 NOT IN (NULL)) = TRUE AND UNKNOWN = UNKNOWN ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2014, 13:00 |
|
where not in (...) и NULL. Почему так?
|
|||
---|---|---|---|
#18+
Dima Tdawв случае с NOT IN мы точно знаем, что один из результатов - нет, а вот при сравнении с NULL результат получается "неизвестно". поэтому, никаких оснований считать результат истинным нет. false AND unknown = unknown. Неверно, если тут не врут Код: sql 1.
т.е. должно выбраться Я к тому что троичная логика тут ни при чем. я оговорился. там будет true AND unknown = unknown. но даже и в случае с false - почему выбраться-то должно? выберется тогда и только тогда, когда общий результат выражения = true. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2014, 13:10 |
|
where not in (...) и NULL. Почему так?
|
|||
---|---|---|---|
#18+
только беда в том что оператору where троичная логика никчему - он ее к двоичной округляет, тут-то данные и теряются ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2014, 13:11 |
|
where not in (...) и NULL. Почему так?
|
|||
---|---|---|---|
#18+
Ivan Durakтолько беда в том что оператору where троичная логика никчему - он ее к двоичной округляет, тут-то данные и теряютсяэто не округление и не только where, это нормальное поведение любой условной конструкции - срабатывание при общем результате выражения, равном TRUE ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2014, 13:14 |
|
where not in (...) и NULL. Почему так?
|
|||
---|---|---|---|
#18+
ShakillIvan Durakтолько беда в том что оператору where троичная логика никчему - он ее к двоичной округляет, тут-то данные и теряютсяэто не округление и не только where, это нормальное поведение любой условной конструкции - срабатывание при общем результате выражения, равном TRUE про нормальное лучше не будет. А то так и до споров о том что есть строка нулевой длинны докатимся ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2014, 13:16 |
|
where not in (...) и NULL. Почему так?
|
|||
---|---|---|---|
#18+
ShakillIvan Durakтолько беда в том что оператору where троичная логика никчему - он ее к двоичной округляет, тут-то данные и теряютсяэто не округление и не только where, это нормальное поведение любой условной конструкции - срабатывание при общем результате выражения, равном TRUEНе совсем так. Если WHERE пропускает только TRUE, то CHECK CONSTRAINT не пропускает только FALSE ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2014, 13:43 |
|
|
start [/forum/topic.php?fid=46&msg=38826132&tid=1699740]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
155ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 244ms |
total: | 497ms |
0 / 0 |