Tabell representera affärsrelationer/föreningar. De "relationer[skepp]" du nämner är FK:er (främmande nycklar), och som inte behövs för att fråga. De anger att underradsvärden för vissa kolumner också måste vara underradsvärden för vissa nyckelkolumner. Det som behövs är att veta vad en rad säger om den aktuella affärssituationen när den ligger i en tabell. (Som, givet vilka situationer som uppstår, bestämmer FK:erna och andra begränsningar.)
Från Krävs för att gå med 2 bord med sina FKs i en 3:e tabell :
Så givet
-- 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, ....)
vi skriver
ps_product s
JOIN ...
ON s.id_product = ...
...
JOIN ps_carrier c
ON ... = id_carrier
WHERE ...
för att få rader var
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 ...
Du behöver känna till dina tabellers predikat och sedan SLÄMMA tabeller ON eller WHERE så att det resulterande predikatet är för de rader du vill ha tillbaka.
Finns det någon tumregel för att konstruera SQL-fråga från en läsbar beskrivning?