Full-Inclusive Join

Union — every item from either list, deduped.

0 items

About Full-Inclusive Join

Full-Inclusive Join returns the union of two lists — every item that appears in either list, with duplicates collapsed. Paste both lists, one item per line; the tool concatenates them and dedupes, preserving the order in which each unique value first appears (List A first, then any items new to List B).

This is what you want when combining lists is the goal and duplicates are noise: merge two mailing lists for a single send, combine multiple requirements.txt files into one, build a single roster from several class lists, or roll up tags from two repositories. It differs from a simple paste-and-concatenate in that duplicates are removed across both lists, not just within each one. It is the conceptual opposite of Inner Join: the inclusive operation keeps everything it can, while the inner operation keeps only the items in both lists.

Examples

Input
List A:
apple
banana
cherry
date

List B:
cherry
date
elderberry
fig
Output
apple
banana
cherry
date
elderberry
fig

All items, deduped. Order is List A first, then items new to List B.

Frequently asked questions

Why not just concatenate the two lists in a text editor?

Concatenation keeps duplicates. The union deduplicates across both lists, so an item that appears in both A and B shows up once in the output, not twice.

How does this differ from Remove Duplicate Lines?

Remove Duplicate Lines works on a single list. Full-Inclusive Join expects two lists and dedupes across both — equivalent to concatenating the two lists and then de-duplicating, but in one step.

Is the output order stable?

Yes. Items appear in their order of first occurrence: List A items in their A-order, then any items unique to B in their B-order.

What about case and whitespace differences?

By default the comparison is case-sensitive and whitespace-sensitive — `Apple` and `apple` are different items, and `apple ` (with a trailing space) is different from `apple`. Run Trim Lines first if whitespace is incidental, or use the case-insensitive option in the comparison bar.