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

Grundlegende Referenztypen der erweiterten JavaScript-Programmierung

Inhaltsverzeichnis 1. Datum 2. RegExp 3. Original...

VUE realisiert Registrierungs- und Login-Effekte

In diesem Artikelbeispiel wird der spezifische Co...

Eine kurze Analyse der Grundkonzepte von HTML-Webseiten

Was ist eine Webseite? Die Seite, die nach dem HT...

Mehrere Möglichkeiten zum Sichern einer MySql-Datenbank

mysqldump-Tool-Sicherung Sichern Sie die gesamte ...

Erweiterte Erklärung der Javascript-Funktionen

Inhaltsverzeichnis Funktionsdefinitionsmethode Fu...

Apropos „Weniger und mehr“ im Webdesign (Bild)

„Weniger ist mehr“ ist ein Schlagwort vieler Desi...

Häufig verwendete JavaScript-Array-Methoden

Inhaltsverzeichnis 1. filter() 2. fürJedes() 3. e...

5 Möglichkeiten, Docker-Container auf andere Server zu migrieren

Migration ist in vielen Fällen unvermeidlich. Har...

Verwendung des Linux Dig-Befehls

Dig-Einführung: Dig ist ein Tool, das DNS einschl...

Webpack erstellt ein Gerüst zum Verpacken von TypeScript-Code

Erstellen eines Ordners Verzeichnisstruktur: daba...

Docker-Installation Tomcat Dubbo-Admin-Instanz-Kenntnisse

1. Laden Sie das Tomcat-Image herunter Docker zie...