Merge Two CSVs on a Key
Join two CSV files on a key column — inner, left, right or full — in the browser: matched, unmatched and repeated keys counted, shared columns renamed.
One merged CSV with the left columns followed by the right ones, an optional _source column, and counts of matched, left-only and right-only rows plus duplicate keys on each side.
Example: Left id/name (1 Ann, 2 Bob, 3 Cy) and right id/city (2 Oslo, 3 Rome, 3 Bern, 4 Lima): a full join gives 5 rows — Ann with no city, Cy twice, Lima with no name — and reports the repeated key 3.
A join,
the way SQL means it.
How rows are matched, what each join keeps, and how columns and keys are handled.
Matching
Both files are parsed per RFC 4180 with the delimiter detected separately for each. The key column is found by header name (case-insensitively if needed) or by 1-based number; keys are compared as text, trimmed and case-folded when you ask. A key that repeats on a side yields one output row per pair, exactly as a SQL join does — the page counts repeated keys so an unexpected row explosion is visible.
What each join keeps
Inner: only matched rows. Left: every left row, right cells blank when unmatched. Right: the mirror. Full: everything from both sides. An optional _source column says where each row came from. Right-only rows carry their key in the left key column so the row still identifies itself.
Columns
The output header is the left header followed by the right header without its key; a right column whose name already exists on the left is suffixed _2 (then _3 …) so nothing is overwritten. The merged CSV uses the left file’s delimiter. Nothing leaves the browser; the same four anonymous usage counts as the rest of the site apply.
SOURCES
- SQL-style join: one output row per matching pair, unmatched rows kept per join type with blank cells; keys compared exactly after optional trimming and case folding; RFC 4180 parsing per file
Last reviewed 21 September 2026. How results are checked: How we verify.