Guide for Miniwind 7: Primers JOINs


Això és una guia per ajudar-te a començar amb aquest problema — no és la solució.

Com abordar aquest problema

Practiques l'INNER JOIN en una BD amb moltes taules. La clau és llegir l'esquema: les columnes acabades en _id (com customer_id, employee_id, product_id) són claus foranes que apunten a la columna id d'una altra taula.

La sintaxi que necessites

SELECT a.columna, b.columna
FROM taula_a a
INNER JOIN taula_b b ON a.altra_id = b.id;
  • FROM taula_a a: la taula de partida, amb un àlies curt.
  • INNER JOIN taula_b b ON ...: la taula que vols afegir i la condició que diu quines files van juntes.
  • Com que gairebé totes les taules tenen una columna id, cal prefixar-la amb l'àlies (a.id, b.id) per saber de quina parles.

Pregunta per pregunta

Pregunta 1. Parteix de les comandes i busca quina columna de orders diu qui és el client. Uneix amb la taula de clients per aquesta relació i retorna dues columnes: l'identificador de la comanda i el nom de l'empresa.

Pregunta 2. Molt semblant a l'anterior, però ara la persona que t'interessa és l'empleat que gestiona la comanda. Busca la clau forana adequada. Compte: també els clients tenen last_name, així que assegura't que el cognom surt de la taula d'empleats.

Pregunta 3. Ara la taula de partida són les línies de comanda. Cada línia apunta a un producte; uneix per aquesta relació i retorna el nom del producte i la quantitat de la línia (una fila per línia, encara que un producte surti moltes vegades).

Un exemple semblant

Identificador de cada comanda amb el nom del seu estat:

SELECT o.id, s.status_name
FROM orders o
INNER JOIN orders_status s ON o.status_id = s.id;

Identificador de cada factura amb la ciutat d'enviament de la comanda a què correspon:

SELECT i.id, o.ship_city
FROM invoices i
INNER JOIN orders o ON i.order_id = o.id;

Paranys habituals:

  • Igualar els dos id (a.id = b.id): les files s'emparellen per casualitat i el resultat no té sentit. Una banda de l'ON ha de ser la clau forana.
  • Escriure id o last_name sense àlies quan existeixen a les dues taules: SQLite dona error de columna ambigua.
  • El jutge no mira els noms de les columnes ni l'ordre de les files, però sí el nombre de columnes i el seu ordre: no afegeixis columnes "de regal" (com l'identificador) si no te les demanen.

Tornar al problema