Показать сообщение отдельно
Старый 05.12.2006, 10:43   #12  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
2 fed
Думаю, что ваше замечание относится к запросу такого вида
X++:
select a
exists join b where a.parm1 == parm1 && a.filed1 == b.field1
Если посмотреть на запрос, отправляемый на сервет, то увидим вот что
X++:
select *
from a
where exists(select 'x' from b where a.parm1 = parm1 and a.field1 = b.field1)
(Я опустил фильтр по компании (dataAreaId). В данном случае это не существенно)
Т.е. при таком запросе условие a.parm1 == parm1 накладывается не на таблицу A, а на связь таблицы A и таблицы B. Будут выбраны все записи для таблицы A и для каждой из них будет вызван внутренний селект. С точки зрения логики запросы будет идентичны - в обоих случаях получаем идентичный набор записей
Кстати, замечание Raven Melancholic - как раз для такого типа запросов.
Это же относится и к notexists join запросам.

Для простого join'а будет генерировать такой запрос
X++:
select *
from a, b
where (a.dataareaid = 'EXT') and ((b.adataareaid = 'EXT') and ((a.parm1=parm1) and (a.field1=b.field1)))
Оптимизатор что MS SQL, что Oracle нормально обрабатывает такие запросы.
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Logger (2).