Mysql
 sql >> Database >  >> RDS >> Mysql

Come trovo le relazioni tra tabelle correlate a lunga distanza? MySQL

Tabelle rappresentare relazioni/associazioni commerciali. Le "relazioni [navi]" che menzioni sono FK (chiavi esterne) e non sono necessarie per l'interrogazione. Affermano che i valori di subrow per alcune colonne devono essere anche valori di subrow per alcune colonne chiave. Ciò che serve è sapere cosa dice una riga sulla situazione aziendale attuale quando è in una tabella. (Che, date le situazioni che si presentano, determinano gli FK e altri vincoli.)

Da Necessario per unire 2 tavoli con i loro FK in un terzo tavolo :

Così dato

-- rows where product [id_product] is supplied by [id_supplier] ...
ps_product(id_product, id_supplier, ...)
-- rows where carrier [id_carrier] has reference [id_reference] ...
ps_carrier(id_carrier, id_reference, ....)

scriviamo

    ps_product s
JOIN ...
ON s.id_product = ...
...
JOIN ps_carrier c
ON ... = id_carrier
WHERE ...

per ottenere righe dove

Il prodotto
    product [p.id_product] is supplied by [p.id_supplier] ...
AND ...
AND s.id_product = ...
...
AND carrier [c.id_carrier] has reference [c.id_reference] ...
AND ... = id_carrier
AND ...

Devi conoscere i predicati delle tue tabelle, quindi UNISCI insieme le tabelle ON o WHERE in modo che il predicato risultante sia per le righe che desideri.

Esiste una regola pratica per costruire query SQL da una descrizione leggibile?