sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo encuentro relaciones entre tablas que están relacionadas a larga distancia? mysql

Mesas representan relaciones comerciales/asociaciones. Las "relación [barco] s" que menciona son FK (claves externas), y que no son necesarias para realizar consultas. Indican que los valores de subfila para algunas columnas también deben ser valores de subfila para algunas columnas clave. Lo que se necesita es saber qué dice una fila sobre la situación comercial actual cuando está en una tabla. (Que, dadas las situaciones que surjan, determinan los FK y otras restricciones).

De Requerido para unir 2 mesas con sus FK en una 3ra mesa :

Así dado

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

escribimos

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

para obtener filas donde

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

Necesita conocer los predicados de sus tablas, luego ÚNASE las condiciones de las tablas ON o WHERE para que el predicado resultante sea para las filas que desea recuperar.

¿Existe alguna regla general para construir una consulta SQL a partir de una descripción legible por humanos?