Frage

Hintergrund

Während des QA/QC schreibe ich viele Abfragen mit mehreren Verknüpfungen. Ich benutze MySQL.

Ich würde gerne wissen, wie (wenn) ich Join -Anweisungen vereinfachen kann, z. B. durch Einstellen von Standardfeldern, an denen ich mich anschließen kann.

Meine Tabellen werden mit einer Pluralform des Objekts benannt, das sie enthalten:

 names
 types
 actions
 surnames
 names_surnames

wo names_surnames ist ein vielfältiger Suchtisch

Die Primärschlüssel sind immer id und die fremden Schlüssel sind immer, z. B.

 names.type_id
 names.action_id
 names_surnames.name_id
 names_surnames.surname_id

Meine Verknüpfungen wären so etwas wie

select names.col1 
from names join types on names.type_id = type.id
           join actions on names.action_id = actions.id;

Frage

Gibt es eine Möglichkeit, MySQL immer davon auszugehen, dass Tische verbunden werden? on thistables.thattable_id = thattable.id?

War es hilfreich?

Lösung

Wie wäre es mit Ansichten erstellen für Verbindungen, die wiederholt verwendet werden?

Zum Beispiel:

create view my_view as 
select names.id as name_id, names.type_id, names.action_id, ...
from names join types on names.type_id = type.id
           join actions on names.action_id = actions.id;

Andere Tipps

Wenn die Spalten in "beiden" Tabellen gleich genannt wurden, könnten Sie denke, Sie könnten verwenden NATURAL JOIN. Obwohl das für Sie nicht funktioniert, sollte Ihre Konsistenz bei der Benennung Sie trotzdem mit einer Skriptsprache an Abfragen-oder zumindest die Join-Klauseln-generieren können.

Wenn die Tabellen, die an der Join -Aktie mit identisch benannten Feldern beteiligt sind,,
Dann können Sie die Verwendung der Join -Syntax verwenden.

Zum Beispiel

Wenn in der Aktionstabelle Action_id als Primärschlüssel statt ID war
und die Type -Tabelle hatte type_id als Primärschlüssel anstelle von ID

Dann ist die Abfrage könnte als umgeschrieben werden wie

select names.col1 
from names join types USING (type_id)
           join actions USING (action_id);

Versuche es !!!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top