MySQL
Eins zu vielen
Suche…
Einführung
Die Idee von eins zu vielen (1: M) bezieht sich auf das Verbinden von Zeilen miteinander, insbesondere in Fällen, in denen eine einzelne Zeile in einer Tabelle vielen Zeilen in einer anderen entspricht.
1: M ist einseitig, das heißt, wenn Sie eine 1: M-Beziehung abfragen, können Sie die Zeile 'eine' verwenden, um 'viele' Zeilen in einer anderen Tabelle auszuwählen, aber Sie können keine einzelne 'viele' Zeile verwenden Wählen Sie mehr als eine einzelne Zeile aus.
Bemerkungen
Wenn Sie mit einer 1: M-Beziehung arbeiten, müssen Sie in den meisten Fällen Primärschlüssel und Fremdschlüssel verstehen.
Ein Primärschlüssel ist eine Spalte in einer Tabelle, in der eine einzelne Zeile dieser Spalte eine einzelne Entität darstellt. Wenn Sie einen Wert in einer Primärschlüsselspalte auswählen, wird genau eine Zeile angezeigt. In den obigen Beispielen steht eine EMP_ID für einen einzelnen Mitarbeiter. Wenn Sie nach einer einzelnen EMP_ID abfragen, wird eine einzelne Zeile angezeigt, die den entsprechenden Mitarbeiter darstellt.
Ein Fremdschlüssel ist eine Spalte in einer Tabelle, die dem Primärschlüssel einer anderen Tabelle entspricht. In unserem obigen Beispiel ist die MGR_ID in der Tabelle EMPLOYEES ein Fremdschlüssel. Um zwei Tabellen zu verknüpfen, werden Sie im Allgemeinen auf der Grundlage des Primärschlüssels einer Tabelle und des Fremdschlüssels in einer anderen Tabelle zusammengefügt.
Beispiel Firmentabellen
Stellen Sie sich ein Unternehmen vor, in dem jeder Mitarbeiter, der Manager ist, einen oder mehrere Mitarbeiter verwaltet, und jeder Mitarbeiter nur einen Manager hat.
Daraus ergeben sich zwei Tabellen:
ANGESTELLTE
EMP_ID | VORNAME | NACHNAME | MGR_ID |
---|---|---|---|
E01 | Johnny | Appleseed | M02 |
E02 | Erin | Macklemore | M01 |
E03 | Colby | Papierkram | M03 |
E04 | Ron | Sonswan | M01 |
MANAGER
MGR_ID | VORNAME | NACHNAME |
---|---|---|
M01 | Laut | McQueen |
M02 | Herrisch | Hose |
M03 | Fass | Jones |
Erhalten Sie die Mitarbeiter, die von einem einzelnen Manager verwaltet werden
SELECT e.emp_id , e.first_name , e.last_name FROM employees e INNER JOIN managers m ON m.mgr_id = e.mgr_id WHERE m.mgr_id = 'M01' ;
Ergebnisse in:
EMP_ID | VORNAME | NACHNAME |
---|---|---|
E02 | Erin | Macklemore |
E04 | Ron | Sonswan |
Letztendlich wird für jeden Manager, nach dem wir fragen, ein oder mehrere Mitarbeiter zurückgeschickt.
Holen Sie sich den Manager für einen einzelnen Mitarbeiter
Beachten Sie die obigen Beispieltabellen, wenn Sie dieses Beispiel betrachten.
SELECT m.mgr_id , m.first_name , m.last_name FROM managers m INNER JOIN employees e ON e.mgr_id = m.mgr_id WHERE e.emp_id = 'E03' ;
MGR_ID | VORNAME | NACHNAME |
---|---|---|
M03 | Fass | Jones |
Da dies das umgekehrte Beispiel ist, wissen wir, dass wir für jeden Mitarbeiter, den wir abfragen, immer nur einen entsprechenden Manager sehen werden.