How to add self join to a table using Query class

Hi,

My requirement is to add a self join to a table using Query class, the Sql could be:

Select t1.col1, t2.col3

From tab1 t1 inner join tab1 t2

Where t1.col1 = t2.col3

How to convert it into query class and add self linking?

Regards,

Abhinay

It’s the same as joining two different tables, you just likely don’t have any relation between col1 and col3, therefore you will have to add one by addLink().

Hi Martin,

I have a form with PurchTable, PurchLine and AccountingDistribution tables in datasource, when I try to add the following code in the init method of AccountingDistribution table it gives a run time error: Error: The data source is not embedded within a (parent) data source.

public****void init()
{
;

super();

this.queryBuildDataSource().addDataSource(tableNum(AccountingDistribution)).joinMode(JoinMode::NoExistsJoin);
this.queryBuildDataSource().relations(false);

this.queryBuildDataSource().addLink(fieldNum(AccountingDistribution, RecId),
fieldNum(AccountingDistribution, ReferenceDistribution));

//info(this.query().toString());
}

It’s because you’re trying to add the link to the parent data source, not to the child one. This works:

Query query = new Query();
QueryBuildDataSource ds1 = query.addDataSource(tableNum(AccountingDistribution));
QueryBuildDataSource ds2 = ds1.addDataSource(tableNum(AccountingDistribution));
ds2.relations(false);
ds2.addLink(fieldNum(AccountingDistribution, RecId),
            fieldNum(AccountingDistribution, ReferenceDistribution));
info(ds1.toString());