# Join Restrictions

Neither DEAPI or RAPI provide an option to perform joins between objects in a single API query. Therefore, there are two recommended solutions to bring data from various objects into a single report.

Option 1 -- ELT to Local Server (recommended)

In this approach, you can pull various reporting objects into a local database in which you are able to create and manage your own queries, views, and security. Using DEAPI's delta and change tracking techniques, you can load and maintain local copies of data that are fairly close to real time. (You can attempt to call RAPI views frequently as well, but it is not recommended as performance is not guaranteed and will likely be slower compared to DEAPI). DEAPI's relationship diagram functionality lets you see how you can join information in your local database after you have retrieved your data.

CSOD Reporting Environments

Option 2 -- Iterative Loops

Within your coding environment, you can build out a looping mechanism to pull information from multiple tables. In the below pseudo-code example, we want to pull applicant information as well as some data on the requisition they have applied to. One down side to this approach is that it generates many small queries instead of grabbing batches of data in a related reporting object at once... this leads to greater potential of running into API throttling limits.

Endpoint = https://{environment}.csod.com/services/api/x/dataexporter/api/objects/applicant_ core
For each job_applicant_id returned:
  Next Endpoint = https://{environment}.csod.com/services/api/x/dataexporter/api/objects/recruiting_core?$filter=ats_req_id eq {job_requisition_id from applicant}