Grundlegende MySQL-Tabellenabfragen – häufige Fehler beim Left-Join

Grundlegende MySQL-Tabellenabfragen – häufige Fehler beim Left-Join

Überblick

Bei kleinen und mittelgroßen Projekten ist die gemeinsame Tabellenabfrage ein sehr gängiger Vorgang, insbesondere beim Erstellen von Berichten. Sind Ihnen beim Korrekturlesen der Daten dennoch Fallstricke aufgefallen? In diesem Artikel werden typische Fehlerquellen bei häufig verwendeten gemeinsamen Tabellenabfragen in MySQL beschrieben.

Grundlegende Umgebung

Anweisung „Tabelle erstellen“

DROP TABLE, WENN `Rolle` EXISTIERT;
CREATE TABLE `Rolle` (
 `id` int(11) NICHT NULL AUTO_INCREMENT,
 `role_name` VARCHAR(50) DEFAULT NULL COMMENT 'Rollenname',
 PRIMÄRSCHLÜSSEL (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Rollentabelle';


in „Rolle“ einfügen VALUES(1, „Administrator“);
in „Rolle“ einfügen VALUES(2, „General Manager“);
in „Rolle“ einfügen VALUES(3, „Abteilungsleiter“);
in „Rolle“ einfügen VALUES(4, „Teamleiter“);

DROP TABLE, WENN `Benutzer` EXISTIERT;
CREATE TABLE `Benutzer` (
 `id` int(11) NICHT NULL AUTO_INCREMENT,
 `role_id` int(11) NOT NULL COMMENT 'Rollen-ID',
 `user_name` VARCHAR(50) DEFAULT NULL COMMENT 'Benutzername',
 `sex` int(1) DEFAULT 0 COMMENT 'Geschlecht',
 PRIMÄRSCHLÜSSEL (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Benutzertabelle';

in „Benutzer“ einfügen VALUES(1, 1, „admin“, 1);
in „Benutzer“ einfügen VALUES(2, 2, „Manager Wang“, 1);
in „Benutzer“ einfügen VALUES(3, 2, „Manager Li“, 2);
in „Benutzer“ einfügen VALUES(4, 2, „Manager Zhang“, 2);
in „Benutzer“ einfügen VALUES(5, 3, „Abteilungsleiter Wang“, 1);
in „Benutzer“ einfügen VALUES(6, 3, „Abteilungsleiter Li“, 1);
in „Benutzer“ einfügen VALUES(7, 3, „Lv Section Chief“, 2);
in „Benutzer“ einfügen VALUES(8, 3, „Abteilungsleiter Xing“, 1);
in „Benutzer“ einfügen VALUES(9, 4, „Team Leader Fan“, 2);
in „Benutzer“ einfügen VALUES(10, 4, „Teamleiter Zhao“, 2);
in „Benutzer“ einfügen VALUES(11, 4, „Ji Team Leader“, 1);

Die Daten sind wie folgt

mysql> wähle * aus Rolle;
+----+-----------+
| ID | Rollenname |
+----+-----------+
| 1 | Administrator |
| 2 | Geschäftsführer|
| 3 | Abteilungsleiter |
| 4 | Teamleiter|
+----+-----------+
4 Zeilen im Satz (0,00 Sek.)

mysql> wähle * vom Benutzer aus;
+----+---------+--------------+------+
| ID | Rollen-ID | Benutzername | Geschlecht |
+----+---------+--------------+------+
| 1 | 1 | Administrator | 1 |
| 2 | 2 | Leiter Wang | 1 |
| 3 | 2 | Leiter Li | 2 |
| 4 | 2 | Leiter Zhang | 2 |
| 5 | 3 | Abteilungsleiter Wang | 1 |
| 6 | 3 | Abteilungsleiter Li | 1 |
| 7 | 3 | Abteilungsleiter Lu | 2 |
| 8 | 3 | Sektionsleiter Xing | 1 |
| 9 | 4 | Teamleiter-Fan | 2 |
| 10 | 4 | Teamleiter Zhao | 2 |
| 11 | 4 | Teamleiter Ji | 1 |
+----+---------+--------------+------+
11 Zeilen im Satz (0,00 Sek.)

Basisgeschäft

Einfacher Informationsbericht: Benutzerinformationen abfragen

mysql> AUSWÄHLEN
  -> Ich würde,
  -> Benutzername AS 'Name',
  -> (FALL, WENN Geschlecht = 1, DANN ‚Männlich‘, WENN Geschlecht = 2, DANN ‚Weiblich‘, SONST ‚Unbekannt‘, ENDE) ALS ‚Geschlecht‘
  -> VON
  -> BENUTZER;
+----+-----------+--------+
| ID | Name | Geschlecht |
+----+-----------+--------+
| 1 | Administrator | Männlich |
| 2 | Manager Wang | Männlich |
| 3 | Managerin Li | Weiblich |
| 4 | Manager Zhang | Weiblich |
| 5 | Abteilungsleiter Wang | Männlich |
| 6 | Abteilungsleiter Li | Männlich |
| 7 | Abteilungsleiterin Lu | Weiblich |
| 8 | Abteilungsleiter Xing | Männlich |
| 9 | Teamleiter Fan | Weiblich |
| 10 | Teamleiterin Zhao | Weiblich |
| 11 | Ji Teamleiter | Männlich |
+----+-----------+--------+

Abfrage des Namens jeder Rolle und der Anzahl der Frauen im entsprechenden Personal

mysql> AUSWÄHLEN
  -> r.id,
  -> r.role_name AS-Rolle,
  -> zähle( u.sex ) ALS Geschlecht
  -> VON
  -> Rolle r
  -> LINKS BEITRETEN BENUTZER u ON r.id = u.role_id
  -> UND u.sex = 2
  -> GRUPPE NACH
  -> r.Rollenname
  -> BESTELLEN NACH
  -> r.id ASC;
+----+-----------+-----+
| Ich | Rolle | Geschlecht |
+----+-----------+-----+
| 1 | Administrator | 0 |
| 2 | Geschäftsführer | 2 |
| 3 | Abteilungsleiter | 1 |
| 4 | Teamleiter | 2 |
+----+-----------+-----+
4 Zeilen im Satz (0,00 Sek.)

Was passiert, wenn wir die Filterbedingung für das Geschlecht in eine Where-Operation ändern?

mysql> AUSWÄHLEN
  -> r.id,
  -> r.role_name AS-Rolle,
  -> zähle( u.sex ) ALS Geschlecht
  -> VON
  -> Rolle r
  -> LINKS BEITRETEN BENUTZER u ON r.id = u.role_id
  -> WO
  -> u.sex = 2
  -> GRUPPE NACH
  -> r.Rollenname
  -> BESTELLEN NACH
  -> r.id ASC;
+----+-----------+-----+
| Ich | Rolle | Geschlecht |
+----+-----------+-----+
| 2 | Geschäftsführer | 2 |
| 3 | Abteilungsleiter | 1 |
| 4 | Teamleiter | 2 |
+----+-----------+-----+
3 Zeilen im Satz (0,00 Sek.)

Hier sieht man, dass die Charakterdaten unvollständig sind.

Finden Sie die Anzahl der Mitarbeiter mit der Rolle des General Managers

mysql> AUSWÄHLEN
  -> r.id,
  -> r.role_name AS-Rolle,
  -> zähle( u.sex ) ALS Geschlecht
  -> VON
  -> Rolle r
  -> LINKS BEITRETEN BENUTZER u ON r.id = u.role_id
  -> WO
  -> r.role_name = 'Generaldirektor'
  -> GRUPPE NACH
  -> r.Rollenname
  -> BESTELLEN NACH
  -> r.id ASC;
+----+-----------+-----+
| Ich | Rolle | Geschlecht |
+----+-----------+-----+
| 2 | Geschäftsführer | 3 |
+----+-----------+-----+
1 Zeile im Satz (0,00 Sek.)

Ändern Sie auch die Filterbedingung von wo nach wo

mysql> AUSWÄHLEN
  -> r.id,
  -> r.role_name AS-Rolle,
  -> zähle( u.sex ) ALS Geschlecht
  -> VON
  -> Rolle r
  -> LINKS BEITRETEN BENUTZER u ON r.id = u.role_id
  -> UND r.role_name = 'General Manager'
  -> GRUPPE NACH
  -> r.Rollenname
  -> BESTELLEN NACH
  -> r.id ASC;
+----+-----------+-----+
| Ich | Rolle | Geschlecht |
+----+-----------+-----+
| 1 | Administrator | 0 |
| 2 | Geschäftsführer | 3 |
| 3 | Abteilungsleiter | 0 |
| 4 | Teamleiter | 0 |
+----+-----------+-----+
4 Zeilen im Satz (0,00 Sek.)

Hier sieht man, dass die Daten redundant sind.

Zusammenfassen

In der linken Join-Anweisung muss der linke Tabellenfilter in die Where-Bedingung und der rechte Tabellenfilter in die On-Bedingung gesetzt werden, damit das Ergebnis genau richtig ist und weder zu viel noch zu wenig.

Damit ist dieser Artikel über die üblichen Fallstricke von Left-Join, einer grundlegenden Operation von MySQL-Join-Tabellenabfragen, abgeschlossen. Weitere relevante Inhalte zu MySQL-Join-Tabellenabfragen mit Left-Join finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Analyse einfacher Anwendungsbeispiele für abgeleitete MySQL-Tabellen (abgeleitete Tabellen)
  • Ein einfaches Beispiel für eine gemeinsame MySQL-Tabellenabfrage
  • Optimierungsmethode für verschachtelte MySQL-Abfragen und gemeinsame Tabellenabfragen
  • Syntaxeinführung zum Aktualisieren und Löschen gemeinsamer Tabellen in MySQL
  • Tatsächlicher Prozess der Abfrage abgeleiteter Tabellen in MySQL

<<:  Detaillierte Erläuterung zum Hinzufügen von Sicherheitsgruppenregeln zum Alibaba Cloud Server (grafisches Tutorial)

>>:  Verwenden von js, um den Effekt eines Karussells zu erzielen

Artikel empfehlen

4 Möglichkeiten, sich schnell Linux-Befehle selbst beizubringen

Wenn Sie ein Linux-Meister werden möchten, ist di...

Detaillierte Erklärung des Json-Formats

Inhaltsverzeichnis Ein JSON basiert auf zwei Stru...

So optimieren Sie den MySQL-Deduplizierungsvorgang maximal

Inhaltsverzeichnis 1. Clevere Verwendung von Indi...

Beispiel für die Verwendung der setInterval-Funktion in React

Dieser Artikel basiert auf der Windows 10-Systemu...

So zeigen Sie Bilder im TIF-Format im Browser an

Der Browser zeigt Bilder im TIF-Format an Code kop...

Lösungen für Probleme bei der Leistungsoptimierung von MySQL-Indizes

Die von MySQL erstellte Optimierung besteht im Hi...

Eine kurze Diskussion zur Logikextraktion und Feldanzeige von Vue3 in Projekten

Inhaltsverzeichnis Logische Schichtung Trennen Si...

Anwendung der MapState-Idee in Vuex

Inhaltsverzeichnis 1. Kartenmethode 2. Anwendung ...

Grafisches Tutorial zur MySQL8-Installationsversion

Installation Die erforderlichen Unterlagen finden...

37 Tipps für ein gutes User Interface Design (mit Bildern)

1. Versuchen Sie, ein einspaltiges statt eines meh...