CSV Table Join

CSV Table Join

Connect two tables by their keys and inspect unmatched records. Original values remain text.

Each CSV: 1 MiB, 5,000 rows, 32 columns and 100,000 cells. Joined output: 10,000 rows, 200,000 cells including headers and 8,000,000 text characters.

The first record contains column names. Leading and trailing header whitespace is removed; empty or duplicate names are rejected. Quoted delimiters, line breaks and doubled quotes are supported. Data stays as original text, and only completely blank records are skipped.

Paste CSV or select a file to begin.

Downloads use UTF-8 with a BOM, commas and CRLF. An apostrophe is added to text that could be interpreted as a spreadsheet formula, including leading =, +, - or @. On-screen source values are unchanged. Check spreadsheet interpretation again if you edit or resave the file.

Rows retained by each join

Join typeRetained rows
Inner · matches onlyEvery left/right pair with matching keys
Left · all left recordsMatching pairs plus unmatched left records, with empty right fields
Full · all records from both sidesMatching pairs and unmatched records from both sides, with missing fields empty

Comments & questions

CSV Table Join

Connect records from two CSV files using shared keys. Relations such as orders with multiple line items retain every matching pair, and unmatched records from either side remain available in separate tables. Select multiple key pairs when the entire combination must match.

Key features

  • Inner, left and full joins using up to four composite key pairs
  • Every pair retained for one-to-many and many-to-many relations
  • Separate unmatched tables with original CSV record numbers
  • Reports for matched source rows, output rows, duplicate key groups and empty keys
  • Explicit key trimming and optional empty-key matching
  • Paginated 50-row previews and formula-protected CSV downloads

How to use

  1. Paste the left and right CSV tables or choose UTF-8 files.
  2. Select each delimiter and read both tables’ columns.
  3. Pair matching key columns, using one to four pairs.
  4. Choose the join type and whitespace/empty-key policies, then run the join.
  5. Review all three result tabs and the row-count report; save the table you need as CSV.

Use cases

  • Connect order items using both an order number and region
  • Attach supplier information to inventory and find missing product codes
  • Preserve leading zeros in text IDs while combining exports
  • Explain expanding output by checking duplicate key groups and matching pairs

Frequently asked questions

How do inner, left and full joins differ?

Inner keeps matching row pairs. Left also keeps unmatched left records with empty right fields. Full additionally keeps unmatched right records. The separate unmatched tables remain available regardless of the chosen join type.

Why can the output contain more rows than either input?

If a key appears twice on the left and three times on the right, it produces six matching pairs. The tool does not silently choose the first row or remove duplicates. Use the pair count and duplicate-key group counts to understand the expansion.

How are empty keys, leading zeros and spaces compared?

The default is exact text comparison: 001 differs from 1 and A differs from a. Unicode is not normalized. A composite key with any empty component does not match by default. Optional trimming applies only to key comparisons, leaving source output untouched. Allowing empty keys matches identical tuples containing empty values.

What do source record numbers and duplicate-key counts mean?

Record numbers count CSV records including the header and blank records. A quoted newline remains part of one record. Duplicate keys count groups with at least two records, not the number of duplicate rows. Empty keys excluded from matching are also excluded from duplicate-key counts.

Which files and output sizes are supported?

Use UTF-8 CSV with commas, semicolons or tabs. Each input allows 1 MiB, 5,000 data rows, 32 columns and 100,000 cells. Joined output is capped at 10,000 rows, 200,000 cells including headers and 8,000,000 text characters. Exceeding a cap returns an error instead of a partial result. Cancel or Esc stops a running calculation.

Why do some downloaded cells start with an apostrophe?

Text that may be interpreted as a spreadsheet formula receives an apostrophe prefix. Original values and on-screen data stay unchanged, and the download message reports how many cells were protected. Interpretation can change when another program edits or resaves the CSV.

Privacy

Pasted CSV, file contents, settings and results are processed in this page’s browser memory. This tool does not automatically send inputs to a server, URL, analytics event or browser storage. Files are created only when you request a download. Input changes, Clear all and leaving the page discard the result.

Related Tools

CSV Pivot WorkbenchJSON ↔ CSVMarkdown Table GeneratorWasm Module InspectorHreflang Matrix CheckerAST Query PlaygroundContainer Build GraphDependency Graph ExplorerSemver Range LabCron Schedule AuditorPatch Review WorkbenchSource Map ExplorerLocalization Catalog AuditorStructured Data ReviewerHTTP Archive AnalyzerWebhook Signature LabProtobuf Schema WorkbenchGraphQL Schema LabAvro Schema EvolutionLocal SQL WorkbenchSchema Form BuilderMesh Repair WorkbenchPipe Network LabRobot Arm Kinematics LabThermal Network LabBeam Response LabGear Train DesignerTolerance Stackup LabSensor Calibration FitPCB Stackup PlannerDigital Filter DesignerNetwork Reachability MapSun Shadow MapGPS Error SimulatorDigital Logic SimulatorAnalog Circuit LabMechanism Linkage LabAnalysis Mesh GeneratorOpenAPI Contract InspectorDatabase Migration PlannerDimensional Equation CheckerTruss Force LabBoolean Minimization LabControl Response LabQueueing Simulation LabGeofence Event SimulatorCoordinate Reference LabSurvey Traverse LabRaster Classification LabChoropleth Design LabMap Print ComposerRaster Reprojection LabElevation Contour MakerTerrain Viewshed LabWatershed DelineatorMap Tile PackagerText File Encoding WorkbenchFilesystem Portability AuditorSBOM License ExplorerFile Signature Auditornpm Lockfile Conflict ResolverSource Secret AuditorOffline Web Package BuilderCertificate Chain InspectorTorrent Metainfo InspectorChunked File PackagerEncrypted File VaultDuplicate File FinderArchive WorkbenchDesign Token ManagerSpacing Token DesignerResponsive Type SystemPackaging Dieline DesignerSVG Icon Sprite PackerFlex Layout PlaygroundCSS Grid PlaygroundRegex Equivalence LabMarkdown Repository AuditorLog Template MinerResponsive Layout AuditorEmail Template PreviewInternal Link GraphState Machine TesterPetri Net SimulatorGit History VisualizerCurl Request WorkbenchBinary Protocol DesignerHex File EditorBinary Patch WorkbenchFile Signature WorkbenchAPI Mock SandboxSchema Column MapperEvent Log SessionizerER Diagram DesignerTime Series Gap AuditorStratified Data SplitterData Lineage DesignerDecision Tree LabData Anonymization WorkbenchData Expectation RunnerJSON Schema ValidatorBasket Pattern AnalyzerRobots Policy TesterSEO HTML AuditorAccessibility Structure AuditorSyndication Feed WorkbenchIndexNow Payload BuilderCrawl Log AnalyzerCSP Policy WorkbenchSearch Performance AnalyzerCSV Formula Risk AuditorCORS Response SimulatorCache Header LabCookie Policy InspectorWeb Vitals Trace LabSitemap Health AuditorBatch File RenamerFile Manifest VerifierFolder Space MapFolder Difference ReviewerRoute Order OptimizerGeoJSON Map EditorPolygon Overlay LabCartographic Label PlacerSpatial Table JoinGeoJSON Topology AuditorGPX Track AnalyzerTrack Privacy RedactorScientific Data ProfilerTabular Cleaning WorkbenchRecord ReconciliationData Dictionary BuilderCanonical Graph AuditorRedirect Plan TesterHTTP response and ping reference testBrowser and System InformationJSON ↔ YAML ConverterXML ↔ JSON ConverterHTML FormatterJavaScript MinifierMock Data Generator.gitignore GeneratorLicense GeneratorUser-Agent ParserPassword Strength CheckerCode to ImageXML FormatterHTTP Status Code LookupMIME Type LookupJS & SQL String EscapeCSS Box Shadow GeneratorCSS Gradient GeneratorIndent ConverterNumber Base ConverterUnicode Escape ConverterUnicode InspectorJSON Structure DiffBase64 EncoderJSON FormatterURL EncoderSQL FormatterCron Expression GeneratorRegex TesterUUID GeneratorHash GeneratorTimestamp ConverterJWT DecoderHTML Entity ConverterMarkdown PreviewCSS MinifierMeta Tag GeneratorCase ConverterImage to Base64
Explore all Dev Tools tools →Image/Media →Text/Convert →Life/Fun →