|
Вопрос по логике работы
|
|||
---|---|---|---|
#18+
Здравствуйте. допустим есть такой запрос Код: sql 1. 2. 3. 4.
по логике (хотя могу ошибаться) создается поток выборки из NEW_TABLE4, идет выборка из него и сразу можно фильтровать по NEW_TABLE4.s = 333. Ширина потока выходного будет 3 поля потом к выходу этого потока идет join NEW_TABLE5. ну и если нашли по условию соединения что то в new_table5 - получаем значение поля DDD и расширяем выходной поток на 1 поле. А вот когда применяется последнее условие? чисто теоретически его можно применить на выходе из потока, который джойнит new_table5. и вроде все будет ок. Но как тогда сервер внутри поведет себя, если условие будет OR NEW_TABLE5.ddd = 55555. Смысла такого условия вроде как нет. в результате будет выдано все, что есть в new_table4. и вроде как вне зависимости от того, как прошел join. Но как внутри сервера такое условие обрабатывается? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2019, 02:57 |
|
Вопрос по логике работы
|
|||
---|---|---|---|
#18+
и такой вопрос. для понимания. запрос. Код: sql 1. 2. 3.
чем он отличатся от первого? первый в итоге выдаст все, что приджойнено и and NEW_TABLE5.ddd = 55555 а вот этот запрос так же выдает все, что есть в new_table, но там, где and NEW_TABLE5.ddd <> 55555 там DDD = null Может до утра и созрею, но хотелось бы услышать мнение знающих ) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2019, 03:03 |
|
Вопрос по логике работы
|
|||
---|---|---|---|
#18+
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, тогда будет просто фильтрация по мере выборки записей. Еще раз - держите в голове просто множества, и операции над ними. Магии нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2019, 03:10 |
|
Вопрос по логике работы
|
|||
---|---|---|---|
#18+
sergqи такой вопрос. для понимания. запрос. Код: sql 1. 2. 3.
чем он отличатся от первого? первый в итоге выдаст все, что приджойнено и and NEW_TABLE5.ddd = 55555 а вот этот запрос так же выдает все, что есть в new_table, но там, где and NEW_TABLE5.ddd <> 55555 там DDD = null Выдаст все из опорной таблицы по условию where. Остальное все в принципе верно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2019, 09:58 |
|
|
start [/forum/topic.php?fid=40&msg=39771807&tid=1560812]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
154ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 256ms |
0 / 0 |