Guide for Miniwind 7: Primers JOINs
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'ONha de ser la clau forana. - Escriure
idolast_namesense à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.