Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie finde ich Beziehungen zwischen Tabellen, die Fernbeziehungen haben? MySQL

Tabellen Geschäftsbeziehungen/Verbände darstellen. Die von Ihnen erwähnten "Relation [ship] s" sind FKs (Fremdschlüssel), die für die Abfrage nicht benötigt werden. Sie besagen, dass Unterzeilenwerte für einige Spalten auch Unterzeilenwerte für einige Schlüsselspalten sein müssen. Was benötigt wird, ist zu wissen, was eine Zeile über die aktuelle Geschäftslage aussagt, wenn sie in einer Tabelle steht. (Die in Anbetracht der auftretenden Situationen die FKs und andere Einschränkungen bestimmen.)

Von Erforderlich, um 2 Tische mit ihren FKs in einem 3. Tisch zu verbinden :

So gegeben

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

wir schreiben

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

um Zeilen zu bekommen wo

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

Sie müssen die Prädikate Ihrer Tabellen kennen und dann Tabellen unter ON- oder WHERE-Bedingungen JOINen, damit das resultierende Prädikat für die Zeilen gilt, die Sie zurückgeben möchten.

Gibt es eine Faustregel, um eine SQL-Abfrage aus einer für Menschen lesbaren Beschreibung zu erstellen?