Зачем перебор в цикле?
PHP код:
table1 tbl;
query q = new Query();
QueryRun qr;
;
Q.addDataSource(tablenum(Table1));
Q.dataSourceTable(tablenum(Table1)).addDataSource(tablenum(Table2));
Q.dataSourceTable(tablenum(Table2)).joinMode(JoinMode::InnerJoin);
Q.dataSourceTable(tablenum(Table2)).addLink(fieldnum(table1, ItemId), fieldnum(table2, ItemId));
Q.addDataSource(tablenum(Table1));
Q.dataSourceTable(tablenum(Table1), 2).addDataSource(tablenum(Table3));
Q.dataSourceTable(tablenum(Table3)).joinMode(JoinMode::InnerJoin);
Q.dataSourceTable(tablenum(Table3)).addLink(fieldnum(table1, ItemId), fieldnum(table3, ItemId));
Q.dataSourceTable(tablenum(Table3)).addDataSource(tablenum(Table2));
Q.dataSourceTable(tablenum(Table2), 2).joinMode(JoinMode::NoExistsJoin);
Q.dataSourceTable(tablenum(Table2), 2).addLink(fieldnum(table3, ItemId), fieldnum(table2, ItemId));
qr = new QueryRun(q);
while (qr.next())
{
tbl = qr.getNo(1);
if (!tbl) tbl = qr.getNo(3);
info(tbl.ItemId);
}
В принципе можно разбить на два отдельных запроса. Минусы - записи отсортированы сначала по table2.itemId, а затем по table3.itemId. И для просмотра неудобно.
По повод view - каким образом объединять ее с table1? Ведь в результате получим соответствующие увеличение кол-ва записей для датасорса.
Единственное верное решение в данном случае - использование UNION. Как грязный xак - можно подправить view на сервере