Показать сообщение отдельно
Старый 13.02.2014, 12:53   #5  
McArrow is offline
McArrow
Участник
 
45 / 38 (2) +++
Регистрация: 18.05.2009
Без fetchMode четвёрка в аналогичном query вообще игнорирует подчинённые датасорсы. А с QueryFetchMode::One2One запрос таки формируется, но криво:

X++:
    q = new Query();
    qbds = q.addDataSource(tablenum(Table5), 'Table5');
    qbdsNE = qbds.addDataSource(tablenum(Table6), 'Table6');
    qbdsNE.joinMode(JoinMode::NoExistsJoin);
    qbdsNE.fetchMode(QueryFetchMode::One2One);
    qbdsNE.addLink(fieldnum(Table5, Table6Id), fieldnum(Table6, Id));
    qbdsNE = qbds.addDataSource(tablenum(Table7), 'Table7');
    qbdsNE.joinMode(JoinMode::NoExistsJoin);
    qbdsNE.fetchMode(QueryFetchMode::One2One);
    qbdsNE.addRange(fieldnum(Table7, RecId)).value('(Table7.Id==Table5.Table7Id)');
    qr = new QueryRun(q);
    qr.next();
X++:
SELECT A.ID, A.TABLE6ID, A.TABLE7ID, A.RECVERSION, A.RECID
  FROM TABLE5 A
 WHERE (A.DATAAREAID = 'DAT')
   AND NOT EXISTS
 (SELECT 'x'
          FROM TABLE6 B
         WHERE ((B.DATAAREAID = 'DAT') AND (A.TABLE6ID = B.ID))
           AND NOT EXISTS
         (SELECT 'x'
                  FROM TABLE7 C
                 WHERE ((C.DATAAREAID = 'DAT') AND (A.TABLE7ID = C.ID))))
 ORDER BY A.DATAAREAID, A.RECID