devShark · Rychlé vysvětlení

SQL JOIN bez hádání

JOIN spojuje související řádky. INNER JOIN zachová shody, LEFT JOIN navíc všechny řádky z levé strany.

Jak to funguje

V tomto dotazu zůstane ve výsledku každý student i bez úspěšného pokusu, protože podmínka status patří do ON; pokud bys a.status = 'passed' přesunul do WHERE, řádky s NULL na pravé straně by vypadly a více odpovídajících pokusů může stále vytvořit několik řádků pro jednoho studenta.

SELECT l.id, a.id AS attempt_id
FROM learners AS l
LEFT JOIN attempts AS a
  ON a.learner_id = l.id
  AND a.status = 'passed';
Přečíst dokumentaci

Častý omyl

Filtr pravé tabulky ve WHERE může omylem odstranit nespárované řádky LEFT JOIN.

Krátké procvičení

1. Který JOIN zachová všechny levé řádky?

LEFT JOIN

2. Kde se zapíše vztah?

V klauzuli ON.

3. Může JOIN znásobit řádky?

Ano.

Procvičit v kvízu

Další témata