Ü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:
|
>>: Verwenden von js, um den Effekt eines Karussells zu erzielen
Kommentare und Nachrichten waren ursprünglich ein...
Wenn Sie ein Linux-Meister werden möchten, ist di...
Inhaltsverzeichnis 1. Einleitung 2. Verwendung 1....
Inhaltsverzeichnis Ein JSON basiert auf zwei Stru...
Inhaltsverzeichnis 1. Clevere Verwendung von Indi...
Dieser Artikel basiert auf der Windows 10-Systemu...
Der Browser zeigt Bilder im TIF-Format an Code kop...
Die von MySQL erstellte Optimierung besteht im Hi...
Ursprüngliche Adresse: https://blog.csdn.net/m0_4...
Inhaltsverzeichnis Logische Schichtung Trennen Si...
Inhaltsverzeichnis 1. Kartenmethode 2. Anwendung ...
Transaktionen in MySQL werden standardmäßig autom...
Installation Die erforderlichen Unterlagen finden...
Vorwort Kürzlich stieß ich bei der Arbeit auf ein...
1. Versuchen Sie, ein einspaltiges statt eines meh...