Показать сообщение отдельно
Старый 31.01.2003, 19:20   #8  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1850 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
public void executeQuery()
{
querybuilddatasource dca;
querybuildrange brca;
querybuilddatasource dpa;
querybuildrange brpa;
;

q = new query();
ds = q.addDataSource(tablenum(Implementations));

if (filter.ClientActivityId())
{
dca = ds.addDataSource(tablenum(Firm2Activities));
dca.addlink(fieldnum(Implementations, ClientId), fieldnum(Firm2Activities, FirmId));
dca.joinMode(JOINMODE::INNERJOIN);
brca = dca.addRange(fieldnum(Firm2Activities, ActivityId));
brca.value(filter.ClientActivityId());
}

if (filter.ProviderActivityId())
{
dpa = ds.addDataSource(tablenum(Firm2Activities));
dpa.addlink(fieldnum(Implementations, ProviderId), fieldnum(Firm2Activities, FirmId));
dpa.joinMode(JOINMODE::INNERJOIN);
brpa = dpa.addRange(fieldnum(Firm2Activities, ActivityId));
brpa.value(filter.ProviderActivityId());
}

this.query(q);
super();
}

Что-то я к вечеру вообще перестаю что-либо понимать. Есть два фильтра - по ClientActivityId и ProviderActivityId. Вместе они выдают БОЛЬШЕ строк, чем по отдельности, что как-то не вяжется с традиционным пониманием inner join-ов.

Сразу оговорюсь - на Firm2Activities уникальный ключ по (FirmId, ActivityId)

Не могу понять (с)