Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment puis-je trouver des relations entre des tables liées à une longue distance ? MySQL

Tableaux représentent des relations d'affaires/associations. Les "relation[ship]s" que vous mentionnez sont des FK (clés étrangères) et qui ne sont pas nécessaires pour l'interrogation. Ils indiquent que les valeurs de sous-ligne pour certaines colonnes doivent également être des valeurs de sous-ligne pour certaines colonnes clés. Ce qu'il faut, c'est savoir ce qu'une ligne dit de la situation actuelle de l'entreprise lorsqu'elle se trouve dans un tableau. (Qui, compte tenu des situations qui se présentent, détermine les FK et autres contraintes.)

De Requis pour joindre 2 tables avec leurs FK dans une 3ème table :

Donc donné

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

nous écrivons

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

pour obtenir des lignes où

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

Vous devez connaître les prédicats de vos tables, puis JOIN ensemble les conditions ON ou WHERE des tables afin que le prédicat résultant corresponde aux lignes que vous souhaitez récupérer.

Existe-t-il une règle empirique pour construire une requête SQL à partir d'une description lisible par l'homme ?