Join two CSV files by a key column

Merge two CSVs like VLOOKUP or a SQL JOIN: inner, left, right or full outer, with match counts and a CSV download.

How it works

  1. Paste file A and file B, each with a header row
  2. Pick the join type and the key column
  3. Check the match counts, then copy or download the CSV

How the join works

To join two CSV files, paste both, name the key column that appears in each, and choose a join type: the tool matches rows whose key is equal and writes one combined CSV. It works like a VLOOKUP in a spreadsheet or a JOIN in SQL. With the sample, file A has the people 001 to 004 and file B has plans for 001, 003 (twice) and 009. An inner join returns 3 rows: 001 once and 003 twice, because 003 appears twice in B. A left join also keeps 002 and 004 with empty plan cells, giving 5 rows. A right join keeps 009 instead, and a full outer join keeps all of them, 6 rows in total. Leave the key boxes empty and the tool uses the first column name found in both files.

Join types in plain words

The join types are the ones defined in the SQL standard (ISO/IEC 9075). Inner keeps only rows whose key is in both files. Left keeps every row of file A and fills the file B columns when a match exists. Right does the same for file B. Full outer keeps every row of both files. The counts under the result show how many rows of A matched, how many rows of A and B found no partner, and how many keys repeat, so you can see at once whether the join did what you expected. For a lookup that adds columns to a list you already have, use Left.

Repeated keys and row counts

When a key appears 2 times in A and 3 times in B, every pair matches and you get 6 rows. That is correct for a join but often surprises people, so the tool warns when keys repeat in B. Choose First match only to get at most one matched row per row of A, like VLOOKUP, which also returns the first match; use Left plus First match for exactly one row per row of A. Keys are compared as text, so 001 and 1 are different and leading zeros are kept. Trim spaces and Ignore case make 'ann ' match 'Ann'. Rows with an empty key never match anything. Several key columns work too: write them separated by a semicolon, such as id; region, in the same order for both files.

Columns, safety and limits

Column names that exist in both files are kept once when they are the key, and otherwise the B column is renamed with _b, such as name_b. Use Output columns to keep only some columns in the order you want. Cells that start with = + - @, a tab, a line break or the full-width forms = + - @ (after any spaces) get a leading apostrophe by default, following the OWASP CSV injection guidance. This reduces the risk of a spreadsheet running them as formulas but does not guarantee it; turn this off if you need the raw values. The separator of each file is detected (comma, semicolon, tab or pipe). Each file can hold up to 10,000 rows and 200 columns, a row cannot have more values than the header, the output can have up to 50,000 rows, and the result is capped at 2 million characters (about 2 MB), so long text cells lower the row limit. First match only is available for Inner and Left joins. Everything runs in your browser and nothing is uploaded; only your option choices are remembered.

Frequently asked questions

How do I join two CSV files on a column?

Paste file A and file B, type the key column name (or leave it empty to use the first name both files share), pick Inner, Left, Right or Full outer, and download the result. Two files with 4 and 4 rows and 2 shared keys give 3 inner-join rows in the sample.

What is the difference between inner, left, right and full outer?

Inner keeps only keys found in both files. Left keeps all rows of A, right keeps all rows of B, and full outer keeps all rows of both. A key missing on one side gets empty cells for that side's columns.

Why does my result have more rows than file A?

A key repeats in file B. If 003 appears 2 times in B, the one row 003 in A becomes 2 rows. Choose First match only to keep at most one matched row per row of A, like VLOOKUP. Use Left plus First match for exactly one row per row of A.

Does it keep leading zeros such as 001?

Yes. Every value is handled as text, so 001 stays 001 and does not match 1. If you want them to match, fix the zeros in one file first.

Can I join on more than one column?

Yes. Write the key columns separated by a semicolon, for example id; region, in both key boxes. A row matches only when every key part is equal, in the same order.

How big can the files be?

Up to 10,000 rows and 200 columns per file, up to 50,000 output rows, and up to 2 million characters of output, whichever comes first. The data stays in your browser.