|
02.03.2005, 11:11 | #1 |
Участник
|
Query: 2 присоединенные таблицы 1:n
Задача: отобрать номенклатуры, которые
1) есть в строках заказов с ценой = 10 2) есть в строках закупок с ценой = 20 На справочнике номенклатур строим стандартный фильтр: цепляем к картотеке номенклатур строки заказа и строки закупки. Добавляем фильтры: Строки заказа, Цена/ед., "10" Строки закупки, Цена/ед., "20" Т.о. у нас к одной таблице присоединены 2 со связями 1:n и с фильтром по ним. Я не знаю, как программно строить такие запросы. Стандартный фильтр работает. Смотрим через мониторинг SQL запросов, что он строит: ------------------ SELECT <куча полей> FROM INVENTTABLE A(NOLOCK) ,INVENTTABLEMODULE B(NOLOCK) ,INVENTTABLEMODULE C(NOLOCK) ,INVENTTABLEMODULE D(NOLOCK) ,INVENTITEMLOCATION E(NOLOCK) WHERE (A.DATAAREAID='fin') AND ((B.DATAAREAID='fin') AND ((B.MODULETYPE=1) AND (A.ITEMID=B.ITEMID))) AND ((C.DATAAREAID='fin') AND ((C.MODULETYPE=0) AND (A.ITEMID=C.ITEMID))) AND ((D.DATAAREAID='fin') AND ((D.MODULETYPE=2) AND (A.ITEMID=D.ITEMID))) AND ((E.DATAAREAID='fin') AND ((E.INVENTDIMID=' Axapta') AND (A.ITEMID=E.ITEMID))) AND EXISTS (SELECT 'x' FROM SALESLINE F(NOLOCK) WHERE ((F.DATAAREAID='fin') AND ((F.SALESPRICE=1.E1) AND (A.ITEMID=F.ITEMID))) AND EXISTS (SELECT 'x' FROM PURCHLINE G(NOLOCK) WHERE ((G.DATAAREAID='fin') AND ((G.PURCHPRICE=2.E1) AND (A.ITEMID=G.ITEMID))))) ORDER BY A.DATAAREAID,A.ITEMID OPTION(FAST 1,LOOP JOIN) ------------------ Видим 2 вложенных подзапроса. Вопрос: как такое построить программно, используя Query? |
|