---
schema_version: "1"
id: fc147d0011d2854c52f1e541c7bb3969b5b281620456da06aa77bb9006b67366
title: Left Join
collection: admin
version: current
locale: en-us
portal_url: https://docs.salesforce.com/admin/current/en-us/data/264-0-0/c360_a_batch_transform_join_leftjoin.md
canonical_url: https://help.salesforce.com/s/articleView?id=data.c360_a_batch_transform_join_leftjoin.htm&release=264.0.0&type=5
source_site: help.salesforce.com
content_type: documentation
content_hash: 8ef981e3736f9a3426b729a7e520c8b3a35d8ead72024be2221c10538f3b1925
description: Like a lookup, a left join includes all rows from the left input data source object and only matching rows from the right object. Unlike a lookup, a join includes all matched rows in the output data when multiple rows match.
products:
  - Data 360
release: "264"
---
# Left Join

Like a lookup, a left join includes all rows from the left input data source object and only matching rows from the right object. Unlike a lookup, a join includes all matched rows in the output data when multiple rows match.

![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-data-data_cloud-264-0-0-production-enus/f3569962-3c9b-4f83-9d0c-b6a574e785da/images/icon_example.png)

Example

Our company's marketing team captures demographic data in an external data source for opportunities stored in Salesforce. To help create more targeted campaigns, the team is segmenting our current opportunities by the Education Level demographic. Let’s use a left join to add demographic data to the opportunity data.

To illustrate how this batch data transform handles unmatched rows and duplicate keys, we included them in both input data sources.

![The new dataset contains columns from both data streams.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-data-data_cloud-264-0-0-production-enus/f3569962-3c9b-4f83-9d0c-b6a574e785da/resources-global/analytics/images/bi_integrate_recipeTransformations_leftJoin_dataStreams.png)

After performing the left join based on the matching keys, the batch data transform produces the following output data.

![The new dataset contains columns from both data streams.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-data-data_cloud-264-0-0-production-enus/f3569962-3c9b-4f83-9d0c-b6a574e785da/resources-global/analytics/images/bi_integrate_recipeTransformations_leftJoin_results.png)

All rows from the left, including those without a match and those with multiple matches, are included in output. Because `Opp_ID` 1 has two matches on the right (High School and Secondary School), the output contains a separate record for each education level. Also, because `Opp_ID` 4 doesn’t have a match, the `Opp_id` and `Education Level` fields are null for that record.