Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: В чем различие запросов
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » В чем различие запросов

Страниц (1): [1]
 

1. Albertino - 12 Мая, 2011 - 08:35:41 - перейти к сообщению
Имеется два sql запроса
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT count(*) FROM TABLE WHERE NOT (row1=1 AND row2=0)

и второй
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT count(*) FROM TABLE WHERE row1<>1 AND row2<>0

по идее они должны выдать результат одно и тоже число, но почемуто в первом случае результат получается больше чем во втором примерно в 2 раза. В чем разница между двумя этими запросами
2. Мелкий - 12 Мая, 2011 - 08:59:30 - перейти к сообщению
первый - выбрать всё. Одно поле не может одновременно содержать два разных значения -> однозначно false (возможно, ещё на этапе разбора запроса), NOT false -> true, подходит любая строка.
второй - выбрать все значения, кроме row1, равным 1 и 2.

Эквивалент первого запроса для второго: NOT (row1=1 OR row2=0). Подробнее можете почитать про булеву алгебру, конкретно представленную тему раскрывают http://ru[dot]wikipedia[dot]org/wiki/Законы_де_Моргана

Ну и немного более лаконичный запрос:
where row1 not in (1,2)
(Добавление)
хм, а имена полей-то разные, не заметил. Но законы де Моргана всё равно в силе, таблица истинности для этих двух выражений разная.

первый - выбрать все строки, кроме тех, у которых row1=1 и row2=2
второй - выбрать строки, кроме тех, у которых row1 не равен 1 и row2 не равен 2

 

Powered by ExBB FM 1.0 RC1