Kann ich die Anweisung "on" von MySQL -Abfragen automatisieren?
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
?
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 !!!