join

Perché uno join crea duplicati?

join non sempre crea un errore: spesso rivela una relazione uno-a-molti poco prevista.

Team SQL.tn10min
Una riga madre si espande in più righe figlie legittime dopo join

Cosa rappresenta una linea prima e dopo join?

Un ordine può contenere diverse linee di prodotti. Dopo join, una riga rappresenta quindi un articolo ordinato e il numero dell'ordine viene legittimamente ripetuto.

Il problema si presenta quando poi aggiungiamo un importo memorizzato a livello di ordine: si ripete una volta per riga e diventa sopravvalutato.

I nomi, gli importi e i dati utilizzati in questo articolo sono fittizi e creati a scopo didattico.

La domanda è stata spiegata

Inizia definendo cosa dovrebbe rappresentare una riga del risultato. Questa decisione determina le colonne, i raggruppamenti e i controlli necessari.

L'esempio seguente isola il meccanismo principale. Eseguilo, osserva il risultato, quindi modifica una clausola alla volta per comprenderne l'effetto.

Calcola le vendite a livello di dettaglio della riga
SELECT p.categorie,
       SUM(l.quantite * l.prix_unitaire) AS chiffre_affaires
FROM lignes_commandes l
JOIN produits p ON p.id_produit = l.id_produit
GROUP BY p.categorie;

Leggi il risultato come un analista

La misura utilizza le colonne presenti a livello di dettaglio della riga. La categoria deriva dal prodotto e non modifica la quantità delle righe di dettaglio.

Per utilizzare una metrica dell'ordine, aggregare innanzitutto le righe o la sottotabella a livello di ordine prima di unirle.

  • Conta le righe prima e dopo JOIN.
  • Controlla l'unicità di ogni chiave.
  • Scrivi la cardinalità attesa.
  • Riconciliare il totale finale con una fonte indipendente.

Errori che distorcono l'analisi

Una query può essere valida senza rispondere correttamente alla domanda. Gli errori più costosi spesso sono silenziosi: perimetro sbagliato, linea moltiplicata o valore mancante interpretato come zero.

Prima di condividere il risultato, confrontalo con un piccolo campione calcolato manualmente e mantieni la definizione dell'ambito con la query.

  • Aggiungi DISTINCT senza capire la ripetizione.
  • Somma l'importo dell'ordine dopo join sulle righe.
  • Connettiti su una colonna non singola.
  • Dimentica che una seconda tabella di dettaglio moltiplica ulteriormente il risultato.

Mettiti in pratica

Risolvi l'esercizio delle tre tabelle e controlla manualmente un ordine con due righe.

Il simulatore SQL di SQL.tn esegue solo query di lettura su dati fittizi nel tuo browser. Puoi provare più scritture e confrontare i risultati senza installare alcun software.

Metti in pratica questa guida.

Apri l’esercizio collegato, esegui la query e confronta il risultato atteso.

Inizia l’esercizio