---
schema_version: "1"
id: 351d12db44ee9e9091dd0fabec92f8fdbb951f47187b2cb471df50b4b140ca4b
title: Inner Join
collection: admin
version: current
locale: en-us
portal_url: https://docs.salesforce.com/admin/current/en-us/analytics/264-0-0/bi_integrate_data_prep_recipe_transformation_innerjoin.md
canonical_url: https://help.salesforce.com/s/articleView?id=analytics.bi_integrate_data_prep_recipe_transformation_innerjoin.htm&release=264.0.0&type=5
source_site: help.salesforce.com
content_type: documentation
content_hash: 1a2434b3811af4884dc2e2ec2846b186e111383956f94103504ac3357223ccf0
description: In CRM Analytics, an inner join includes only matching rows from the left (recipe data) and right. The join includes all matched rows in the target when multiple rows match.
products:
  - CRM Analytics
  - Cross Cloud
release: "264"
---
# Inner Join

In CRM Analytics, an inner join includes only matching rows from the left (recipe data) and right. The join includes all matched rows in the target when multiple rows match.

### Required Editions

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small edition"><colgroup><col></colgroup><tbody><tr class=""><td class="slds-cell-wrap" style="vertical-align:top;">Available in Salesforce Classic and Lightning Experience.</td></tr><tr class=""><td class="slds-cell-wrap" style="vertical-align:top;">Available with CRM Analytics, which is available for an extra cost in <strong>Enterprise</strong>, <strong>Performance</strong>, and <strong>Unlimited</strong> Editions. Also available in <strong>Developer</strong> Edition.</td></tr></tbody></table>

Example

Our company's marketing team captures demographic data in an external data source for opportunities stored in Salesforce. To compare opportunities by education level of the customer, let’s first combine both sets of data into a dataset using an inner join.

Consider the following two data streams that feed the recipe’s target dataset. To illustrate how this recipe function handles unmatched rows and duplicate keys, we included them in both data streams.

![The left data stream shows the opportunity ID, customer name, and opportunity amount. The right data stream shows the opportunity ID and educational level.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-analytics-bi-264-0-0-production-enus/ec791473-f5b4-4f64-a656-9104f455d966/resources-global/analytics/images/bi_integrate_recipeTransformations_innerJoin_dataStreams.png)

After performing the inner join based on the matching keys, the recipe produces the following target dataset.

![The new dataset contains columns from both data streams.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-analytics-bi-264-0-0-production-enus/ec791473-f5b4-4f64-a656-9104f455d966/resources-global/analytics/images/bi_integrate_recipeTransformations_innerJoin_results.png)

All rows that have a match are included in the target. Because of multiple matches, you see two records with Opp\_ID 2 (Amy and Bob) and two records with Opp\_id 1 (High School and Secondary School). Notice also that Opp\_ID 4 and Opp\_id 5 are excluded from the target because neither have a match.

#### See Also

- [Join Node: Add Related Columns of Data to the Recipe](https://help.salesforce.com/s/articleView?id=analytics.bi_integrate_recipe_join_data.htm&release=264.0.0&type=5 "Use a join node in CRM Analytics to add columns of data from related objects to existing data in a recipe. When working with CRM Analytics datasets and external objects, add a join node on the recipe canvas. When working with Salesforce objects, you can either create a join on the recipe canvas or join the data when you first create your dataset on the Add Input Data screen.")