powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопрос по логике работы
6 сообщений из 6, страница 1 из 1
Вопрос по логике работы
    #39771733
sergq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

допустим есть такой запрос

Код: sql
1.
2.
3.
4.
select NEW_TABLE4.S, NEW_TABLE4.CH,  NEW_TABLE4.j, NEW_TABLE5.DDD from NEW_TABLE4
left join NEW_TABLE5 on NEW_TABLE5.c = NEW_TABLE4.j
where NEW_TABLE4.s = 333
and  NEW_TABLE5.ddd = 55555



по логике (хотя могу ошибаться) создается поток выборки из NEW_TABLE4, идет выборка из него и сразу можно фильтровать по NEW_TABLE4.s = 333. Ширина потока выходного будет 3 поля

потом к выходу этого потока идет join NEW_TABLE5. ну и если нашли по условию соединения что то в new_table5 - получаем значение поля DDD и расширяем выходной поток на 1 поле. А вот когда применяется последнее условие? чисто теоретически его можно применить на выходе из потока, который джойнит new_table5. и вроде все будет ок.
Но как тогда сервер внутри поведет себя, если условие будет OR NEW_TABLE5.ddd = 55555.

Смысла такого условия вроде как нет. в результате будет выдано все, что есть в new_table4. и вроде как вне зависимости от того, как прошел join. Но как внутри сервера такое условие обрабатывается?
...
Рейтинг: 0 / 0
Вопрос по логике работы
    #39771735
sergq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и такой вопрос.
для понимания.

запрос.
Код: sql
1.
2.
3.
select S, CH,DDD from NEW_TABLE4
left join NEW_TABLE5 on NEW_TABLE5.c = NEW_TABLE4.j and NEW_TABLE5.ddd = 55555
where NEW_TABLE4.s = 333



чем он отличатся от первого? первый в итоге выдаст все, что приджойнено и and NEW_TABLE5.ddd = 55555

а вот этот запрос так же выдает все, что есть в new_table, но там, где and NEW_TABLE5.ddd <> 55555 там DDD = null


Может до утра и созрею, но хотелось бы услышать мнение знающих )
...
Рейтинг: 0 / 0
Вопрос по логике работы
    #39771736
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergq,

работает так.
поскольку NEW_TABLE4 left join NEW_TABLE5
множество записей из new_table4 будет взято целиком. А записи из new_table5 будут браться в соответствии с этими записями, поиском по соответствующему индексу на new_table5 по условию join.
Дальше, данные будут отфильтрованы по where, как по условию new_table4, так и по условию new_table5.
Если что-то можно "продвинуть" внутрь join, оно продвинется.
http://www.ibase.ru/joins/
http://www.ibase.ru/dataaccesspaths/

"расширяем поток", "на выходе из потока" - не надо всякую муть сочинять. Есть множества, они объединяются конкретным образом. Волшебных образов для объединения множеств нет.
sergqесли условие будет OR NEW_TABLE5.ddd = 55555.
если есть индекс по столбцу ddd, тогда будет слияние битовой маски выборки по NEW_TABLE5 по OR, если там есть другие условия по другим индексам. Если нет индекса по ddd, тогда будет просто фильтрация по мере выборки записей.
Еще раз - держите в голове просто множества, и операции над ними. Магии нет.
...
Рейтинг: 0 / 0
Вопрос по логике работы
    #39771737
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergq,
см.
http://www.ibase.ru/joins/
там такой пример есть.
...
Рейтинг: 0 / 0
Вопрос по логике работы
    #39771758
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergqи такой вопрос.
для понимания.

запрос.
Код: sql
1.
2.
3.
select S, CH,DDD from NEW_TABLE4
left join NEW_TABLE5 on NEW_TABLE5.c = NEW_TABLE4.j and NEW_TABLE5.ddd = 55555
where NEW_TABLE4.s = 333



чем он отличатся от первого? первый в итоге выдаст все, что приджойнено и and NEW_TABLE5.ddd = 55555

а вот этот запрос так же выдает все, что есть в new_table, но там, где and NEW_TABLE5.ddd <> 55555 там DDD = null

Выдаст все из опорной таблицы по условию where. Остальное все в принципе верно.
...
Рейтинг: 0 / 0
Вопрос по логике работы
    #39771807
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergqчем он отличатся от первого?

Первый запрос совершенно бестолков, второй уже имеет смысл и написавшему можно не отрывать
руки. Подробности у kdv.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопрос по логике работы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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