## TL;DR
Hunt the child rows, not the test: a dbt relationships test fails when fact rows carry a key with no parent, so list the unmatched keys, then decide per key whether the parent is missing, the key is mistyped, or the fact arrived early. The relationships test is a left join that reports children with no match. Every failure is a concrete key list, and each key has a story the fix must match.

```text
dbt relationships test failed error "foreign key value has no matching parent row"
```

## Use this when
- The check or run fails with this symptom: a dbt relationships test fails with foreign key value has no matching parent row.
- You are working on a dbt project with relationships tests between fact and dimension models and the failure repeats on the same data or configuration.
- You need the failing rows, rule, or stage isolated before changing thresholds or code.

## Not for this skill when
- A test pointed at the wrong parent column after a refactor, where the keys are fine and the test definition is wrong.
- The error text names a different tool, stage, or root cause. Match the verbatim error first and use that skill.

## Steps
1. Run the compiled relationships test query and collect the unmatched key values. Verify: the failing keys are listed with counts
2. Look each sample key up in the parent source, not only the parent model. Verify: keys missing from the source and keys filtered out by the model separate cleanly
3. For keys filtered by the parent model, fix the filter or the join that drops them. Verify: the parent model now includes the missing members
4. For keys absent at source, quarantine the child rows or load the missing parents if another system holds them. Verify: child rows are held out of the marts until matched
5. Rerun dbt test for the model pair. Verify: the relationships test passes

## Variant phrasings
### dbt relationships test foreign key no matching parent
The shorter phrasing focused on the named failure.
### dbt relationships test failed error fix
The symptom phrasing a searcher tries next.
### foreign key value no parent row dbt
The variant naming the failing stage or tool directly.

Compatibility: dbt Core relationships generic test, fact and dimension modelling

## Why it happens
Relationships tests fail for three different reasons that need three different fixes: parents dropped by model logic, parents that never arrived, and children written with bad keys. Treating them as one problem produces blanket fixes that hide the real one.

## Edge cases / pitfalls
- Late arriving parents make this test flap on a schedule; if keys match a day later, the answer is check timing, not data surgery.
- A parent model with a dedupe step can drop the exact key variant the children use, such as a padded or case variant; compare raw key forms.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_y-0y3NmJW2a5N3zzWdy6Rw
