Detaillierte Analyse des Problems beim Hinzufügen von Where-Bedingungen mit Left Join in MySQL

Detaillierte Analyse des Problems beim Hinzufügen von Where-Bedingungen mit Left Join in MySQL

Aktuelle Nachfrage:

Es gibt zwei Tabellen, Gruppe und Faktor. Eine Gruppe entspricht mehreren Faktoren. Nun wollen wir die gültigen Gruppen und die dazugehörigen gültigen Faktoren abfragen. Beide Tabellen haben das logische Löschflag isDel.

Bildbeschreibung hier einfügen

Der erste Fehler :

SELECT g.*,f.* FROM groups g LEFT JOIN factor f ON f.groupId = g.id where g.isDel=0 and f.isDel=0

Das Schlüsselwort LEFT JOIN gibt alle Zeilen aus der linken Tabelle (table_name1) zurück, auch wenn in der rechten Tabelle (table_name2) keine passenden Zeilen vorhanden sind.
Wenn die Tabelle auf der linken Seite keine entsprechenden Daten in der Tabelle auf der rechten Seite aufweist, kann die Abfrage wegen des Codeproblems f.isDel=0 nicht ausgeführt werden.

Falsche Schreibweise:

SELECT g.*,f.* FROM Gruppen g LEFT JOIN Faktor f ON f.groupId = g.id und g.isDel=0 und f.isDel=0

Diese Art, g.isDel=0 zu schreiben, ist wirkungslos und führt zu falschen Abfragedaten.

Ursachenanalyse:

Mehrere Wissenspunkte zu den Wo- und Unterbedingungen beim Left Join:

  • Der Multi-Table Left Join erzeugt eine temporäre Tabelle und gibt sie an den Benutzer zurück.
  • Die Where-Bedingung dient zum Filtern der zuletzt generierten temporären Tabelle und zum Herausfiltern der Datensätze, die die Where-Bedingung nicht erfüllen.
  • Die Bedingung „Ein“ besteht darin, die rechte Tabelle des linken Joins bedingt zu filtern, aber alle Zeilen der linken Tabelle werden weiterhin zurückgegeben und diejenigen, die nicht in der rechten Tabelle enthalten sind, werden mit NULL gefüllt.
  • Wenn in der Ein-Bedingung Einschränkungen für die linke Tabelle vorliegen, werden alle Zeilen der linken Tabelle zurückgegeben, unabhängig davon, ob die Bedingung wahr oder falsch ist, aber die übereinstimmenden Werte der rechten Tabelle sind davon betroffen. Das heißt, die Einschränkungsbedingungen der linken Tabelle wirken sich nur auf den übereinstimmenden Inhalt der rechten Tabelle aus und haben keinen Einfluss auf die Anzahl der zurückgegebenen Zeilen.

Richtige Schreibweise:

SELECT g.*,f.* FROM groups g LEFT JOIN factor f ON f.groupId = g.id und f.isDel=0 wobei g.isDel=0

abschließend:

1. Um der linken Tabelle bedingte Einschränkungen hinzuzufügen, fügen Sie sie in der Where-Bedingung hinzu und platzieren Sie sie nicht nach „on“.
2. Bedingte Einschränkungen müssen der rechten Tabelle nach „on“ hinzugefügt werden. Das Hinzufügen in der Where-Bedingung führt zu Problemen mit der Anzahl der Datenzeilen.

Dies ist das Ende dieses Artikels über die Analyse des Problems der Verwendung von Left Join zum Hinzufügen von Where-Bedingungen in MySQL. Weitere relevante Inhalte zum Hinzufügen von Where zu MySQL Left Join finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Analyse des Unterschieds zwischen der Verwendung von Left Join-Einstellungsbedingungen in „on“ und „where“ in MySQL
  • Einführung in den Unterschied zwischen On- und Where-Bedingungen in der MySQL-Left-Join-Operation
  • Analysieren des Unterschieds zwischen der Verwendung von „on“ und „where“ Filtern in MySQL left (right) join

<<:  Zusammenfassung häufig verwendeter Befehle für die Einreichung von Docker-Wettbewerben

>>:  Verstehen Sie die Verwendung des All-Attributs von CSS3

Artikel empfehlen

So verbergen Sie die Grenze/Trennlinie zwischen Zellen in einer Tabelle

Nur den oberen Rand anzeigen <table frame=above...

Eine kurze Diskussion über die Rolle von Vue3 defineComponent

Inhaltsverzeichnis defineComponent-Überladungsfun...

So installieren Sie das Modul „lua-nginx-module“ in Nginx

ngx_lua_module ist ein Nginx-HTTP-Modul, das den ...

Django2.* + Mysql5.7-Entwicklungsumgebung Integrations-Tutorial-Diagramm

Umfeld: MAC_OS 10.12 Python 3.6 MySQL 5.7.25 Djan...

Zusammenfassung der Probleme mit der Mysql-connector-java-Treiberversion

Problem mit der Mysql-Connector-Java-Treiberversi...

Docker stop stoppt/remove löscht alle Container

In diesem Artikel wird hauptsächlich das Stoppen/...

Tutorial zur Installation und Konfiguration von MySQL für Mac

In diesem Artikel finden Sie das MySQL-Installati...

9 praktische Tipps zum Erstellen von Webinhaltsseiten

Inhalt 1. Geben Sie den Lesern einen Grund zu blei...

HTML-Endtag-Problem und W3C-Standard

Gemäß den Grundsätzen des W3C muss jedes Start-Tag...

Detaillierte Erklärung der Lösung zum Vergessen des Passworts in MySQL 5.7

Umwelt: [root@centos7 ~]# uname -r 3.10.0-514.el7...

IE6 implementiert min-width

Zunächst einmal wissen wir, dass dieser Effekt ei...

Fortgeschrittene JavaScript-Programmierung: Variablen und Umfang

Inhaltsverzeichnis 1. Ursprungswert und Bezugswer...