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

Hvordan finder jeg relationer mellem tabeller, der er langdistancerelaterede? MySQL

Borde repræsentere forretningsforbindelser/foreninger. De "relationer[skib]" du nævner er FK'er (fremmednøgler), og som ikke er nødvendige for at forespørge. De angiver, at underrækkeværdier for nogle kolonner også skal være underrækkeværdier for nogle nøglekolonner. Det, der skal til, er at vide, hvad en række siger om den aktuelle forretningssituation, når den er i en tabel. (Som, givet hvilke situationer der opstår, bestemmer FK'erne og andre begrænsninger.)

Fra Påkrævet for at deltage i 2 borde med deres FK'er i en 3. tabel :

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 ...
 

for at få rækker hvor

    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 skal kende dine tabellers prædikater og derefter JOIN tabeller ON eller WHERE betingelser, så det resulterende prædikat er for de rækker, du vil have tilbage.

Er der nogen tommelfingerregel til at konstruere SQL-forespørgsler ud fra en menneskelig læsbar beskrivelse?




  1. 12c Adaptive planer

  2. PostgreSQL 9-installation på Windows:Kan ikke skrive inde i TEMP-miljøstien.

  3. SQL:Hvordan finder man dubletter baseret på to felter?

  4. Kan ikke finde mysql.sock