Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 фильтр where  [new]
Swv
Member

Откуда:
Сообщений: 117
Здравствуйте.


Видно слегка не догоняю с арифметикой where

есть такой запрос

select '(m.d = 3 and m.c = 6) or  j.gg = 6', m.c,m.d,m.y, j.c, j.hh,j.jj,j.gg   from main_test m
left join main_test_join j on j.main_test_id = m.c

where (m.d = 3 and m.c = 6) or  j.gg = 6


он собственно выдал честно все записи, в которых m.d = 3 и j.gg = 6. а вот m.c получился не только равный 6
Не догоняю почему. даже с учетом скобок



а вот такой вот запрос

select 'm.d = 3  or  j.gg = 6', m.c,m.d,m.y, j.c, j.hh,j.jj,j.gg   from main_test m
left join main_test_join j on j.main_test_id = m.c

where m.d = 3  or  j.gg = 6

выдал все записи m.d = 3 и сджойнил main_test_join по условию, но j.gg = 6 по сути вроде как не учитывалось. и выдало все, что есть во второй таблице по условию связи таблиц

а вот такой вот запрос

select '(m.d = 3 and m.c = 6)', m.c,m.d,m.y, j.c, j.main_test_id, j.hh,j.jj,j.gg   from main_test m
left join main_test_join j on j.main_test_id = m.c

where (m.d = 3 and m.c = 6)


честно выдал одну запись по условию m.d = 3 and m.c = 6

собственно хочу понять почему в первом и третьем запросах так разнятся выходные данные. по логике в третьем запросе при выборке из main_test сразу фильтруется по m.d = 3 and m.c = 6, а потом уже join. А вот почему такие результаты странные в первом запросе? хотелось бы понять какую логику фильтрации сервер применяет в первом запросе
9 мар 19, 16:52    [21828419]     Ответить | Цитировать Сообщить модератору
 Re: фильтр where  [new]
Swv
Member

Откуда:
Сообщений: 117
Сам же и отвечу) надеюсь верно

Это ж получается с and и or цельное условие.
И в случае наличия только and сервер перенес фильтрацию на уровень после выборки из основной таблицы (на правах оптимизации) до join.

А в случае наличия и and и or сервер уже фильтровал полностью результат поле join. По этому и по M идет natural
9 мар 19, 17:01    [21828422]     Ответить | Цитировать Сообщить модератору
 Re: фильтр where  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 27939
Swv,

http://www.ibase.ru/joins/
написано про разницу условия по where и on.
9 мар 19, 18:18    [21828449]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить