Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / фильтр where / 3 сообщений из 3, страница 1 из 1
09.03.2019, 16:52
    #39784083
Swv
Swv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фильтр where
Здравствуйте.


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

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

Код: sql
1.
2.
3.
4.
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
Не догоняю почему. даже с учетом скобок



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

Код: sql
1.
2.
3.
4.
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 по сути вроде как не учитывалось. и выдало все, что есть во второй таблице по условию связи таблиц

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

Код: sql
1.
2.
3.
4.
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. А вот почему такие результаты странные в первом запросе? хотелось бы понять какую логику фильтрации сервер применяет в первом запросе
...
Рейтинг: 0 / 0
09.03.2019, 17:01
    #39784085
Swv
Swv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фильтр where
Сам же и отвечу) надеюсь верно

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

А в случае наличия и and и or сервер уже фильтровал полностью результат поле join. По этому и по M идет natural
...
Рейтинг: 0 / 0
09.03.2019, 18:18
    #39784102
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фильтр where
Swv,

http://www.ibase.ru/joins/
написано про разницу условия по where и on.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / фильтр where / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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