# JoinByKey

Takes a list of concepts, plus attributes indicating their primary keys, and joins the concepts. In TheOutputConcept, only one of the keys must be present. Each `BaseAttribute` specified in TheKeys must be a primary key of one of TheConcepts; thus, the number of entries in TheConcepts and TheKeys must be equal.

If several of the input concepts contain a `BaseAttribute` (or a `MultiColumnFeature`) with the same name, a special mapping mechanism is needed to relate them to different features in TheOutputConcept. For this, the parameters MapInput and MapOutput exist. Use MapInput to specify any feature in one of TheConcepts, and use MapOutput to specify the corresponding feature in TheOutputConcept. To make sure that for each MapInput the right MapOutput is found by this operator, it uses the looping mechanism. Although the parameter is not looped, the loop numbers in the parameter table in M4 are used to ensure the correspondence between MapInput and MapOutput. However, these two parameters only need to be specified for every pair of equally-named features in TheConcepts. So there are not necessarily as many "loops" as there are features in TheOutputConcept.

The field `par_stloopnr` in the M4 parameter table must be set to the number of pairs of MapInput/MapOutput parameters (may be 0). Each of these pairs gets a different loop number while all the other parameters get loop number 0.

ParameterName | ObjectType | Type | Remarks
TheConcepts | CON List | IN | no TheInputConcept!
TheKeys | BA List | IN |
MapInput | BA or MCF | IN | ``looped''!
MapOutput | BA or MCF | OUT | ``looped''!
TheOutputConcept | CON | OUT | inherited