Join two tables

Join two tables on 1–3 key columns using an inner or left join, with explicit duplicate and empty-key behavior.

All processing is local, without automatic storage or input uploads. Combined UTF-8 text/files: at most 2 MiB; each table has at most 5,000 data rows, 100 columns, 100,000 cells and 20,000 UTF-16 units per cell. Output including BOM: at most 2 MiB; each worker or file-reading operation has a 5-second deadline.

Delimiters are explicit; leading zeroes, spaces and line breaks inside cells remain. Blank rows are not dropped and uneven rows are not padded. A final line terminator is not an extra record. Original files stay unchanged.

Table 1

The first row contains unique, nonempty headers; matching is exact and case-sensitive.

Table 2

The first row contains unique, nonempty headers; matching is exact and case-sensitive.

Read columns after entering tables or changing delimiters. Options show the column number and a name preview; selection uses the complete original name without changing spaces or line breaks. Reading again resets the key to the first column; review your choices before processing.

Duplicate keys produce every matching pair in table-1 order followed by table-2 order, not only the first match. Expansion beyond limits is rejected before generating the result. Unmatched right-side cells in a left join contain empty strings.

CSV quotes every cell and uses CRLF; downloads include a UTF-8 BOM, while copy does not. The system clipboard may normalize line breaks inside cells too; use the download to preserve their original line breaks. The default policy prefixes an apostrophe before potential leading =, +, -, @, tabs or line breaks, including headers and negative numbers. Only the export copy changes. Literal export can be interpreted as formulas by a spreadsheet application; review import-as-text settings.

How to use

Enter both tables and their delimiters, read the columns, then select corresponding keys in the same order. Choose inner or left join and whether empty keys match. Process and review the row count and formula export policy before copying or downloading.

Try an example

Table 1 has id,name rows 1,Amal and 2,Ali; table 2 has id,city row 1,Riyadh. Inner join returns Amal only; left join returns Amal and Ali, with empty text for Ali’s city.

Support & limits

Keys use exact strings without trimming or numeric conversion; 001 differs from 1. Duplicate keys produce every matching pair in table-1 order then table-2 order; expansion beyond limits is rejected before constructing the result. Empty compound keys follow the chosen policy. All columns remain, with left: and right: header prefixes to avoid collisions; key columns are not removed.

Common questions

Why can the result contain more rows than either input?

A key occurring twice in the first table and three times in the second produces six rows. The tool does not choose only the first match or silently combine values. CSV quotes all cells and uses CRLF while preserving line breaks inside cells. Downloads include a UTF-8 BOM; copy does not. The system clipboard may normalize line breaks inside cells too; use the download to preserve their original line breaks. By default, formula-like cells, including headers and negative numbers, receive an apostrophe in the export copy only. Literal export leaves them unchanged, but a spreadsheet application may interpret them as formulas. Review import-as-text settings. The preview limits displayed rows and columns; copy and download include the complete result.

Related tools