The following jointypes produce the following types of results, based on the records matching produced by the joincondition:
Examples:
outrec := RECORD people.id; people.firstname; people.lastname; END; RT_folk := JOIN(people(firstname[1] = 'R'), people(lastname[1] = 'T'), LEFT.id=RIGHT.id, TRANSFORM(outrec,SELF := LEFT)); OUTPUT(RT_folk); //*********************** Half KEYED JOIN example: peopleRecord := RECORD INTEGER8 id; STRING20 addr; END; peopleDataset := DATASET([{3000,'LONDON'},{3500,'SMITH'}, {30,'TAYLOR'}], peopleRecord); PtblRec doHalfJoin(peopleRecord l) := TRANSFORM SELF := l; END; FilledRecs3 := JOIN(peopleDataset, SequenceKey, LEFT.id=RIGHT.sequence,doHalfJoin(LEFT)); FilledRecs4 := JOIN(peopleDataset, AlphaKey, LEFT.addr=RIGHT.Lname,doHalfJoin(LEFT)); //******************* Full KEYED JOIN example: PtblRec := RECORD INTEGER8 seq; STRING2 State; STRING20 City; STRING25 Lname; STRING15 Fname; END; PtblRec Xform(person L, INTEGER C) := TRANSFORM SELF.seq := C; SELF.State := L.per_st; SELF.City := L.per_full_city; SELF.Lname := L.per_last_name; SELF.Fname := L.per_first_name; END; Proj := PROJECT(Person(per_last_name[1]=per_first_name[1]), Xform(LEFT,COUNTER)); PtblOut := OUTPUT(Proj,,'~RTTEMP::TestKeyedJoin',OVERWRITE); Ptbl := DATASET('RTTEMP::TestKeyedJoin', {PtblRec,UNSIGNED8 __fpos {VIRTUAL(fileposition)}}, FLAT); AlphaKey := INDEX(Ptbl,{lname,fname,__fpos}, '~RTTEMPkey::lname.fname'); SeqKey := INDEX(Ptbl,{seq,__fpos},'~RTTEMPkey::sequence'); Bld1 := BUILD(AlphaKey ,OVERWRITE); Bld2 := BUILD(SeqKey,OVERWRITE); peopleRecord := RECORD INTEGER8 id; STRING20 addr; END; peopleDataset := DATASET([{3000,'LONDON'},{3500,'SMITH'}, {30,'TAYLOR'}], peopleRecord); joinedRecord := RECORD PtblRec; peopleRecord; END; joinedRecord doJoin(peopleRecord l, Ptbl r) := TRANSFORM SELF := l; SELF := r; END; FilledRecs1 := JOIN(peopleDataset, Ptbl,LEFT.id=RIGHT.seq, doJoin(LEFT,RIGHT), KEYED(SeqKey)); FilledRecs2 := JOIN(peopleDataset, Ptbl,LEFT.addr=RIGHT.Lname, doJoin(LEFT,RIGHT), KEYED(AlphaKey)); SEQUENTIAL(PtblOut,Bld1,Bld2,OUTPUT(FilledRecs1),OUTPUT(FilledRecs2))