Beheben des Problems mit Nullzeilen in MySQL Left Join
In MySQL kommt es beim Ausführen einer Left-Join-Abfrage häufig zu einem Problem Szenario, in dem nicht alle Zeilen aus der linken Tabelle zurückgegeben werden. Dieses Problem tritt auf, wenn die Join-Bedingung in der WHERE-Klausel anstelle der ON-Klausel angegeben wird.
Betrachten Sie die folgende Abfrage, die die Tabellen jos_hp_properties (pr) und jos_hp_properties2 (pr7) verknüpft:
SELECT pr.*, pr7.value AS `room_price_high` FROM `jos_hp_properties` pr LEFT OUTER JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id WHERE pr7.field=23
Wie vom Benutzer erwähnt, gibt diese Abfrage nur eine Zeile aus der ersten Tabelle zurück, obwohl diese 27 Zeilen enthält jos_hp_properties-Tabelle. Der Grund dafür ist, dass die WHERE-Bedingung pr7.field=23 alle Zeilen aus jos_hp_properties herausfiltert, die keinen passenden Feldwert von 23 in der Tabelle jos_hp_properties2 haben.
Um dieses Problem zu beheben und alle Zeilen abzurufen In der ersten Tabelle, einschließlich des Werts „room_price_high“ aus der zweiten Tabelle (oder NULL, wenn kein passendes Feld vorhanden ist), sollte die WHERE-Bedingung nach „ON“ verschoben werden Klausel des linken Joins:
SELECT pr.*, pr7.value AS `room_price_high` FROM `jos_hp_properties` pr LEFT OUTER JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id AND pr7.field=23
Durch Platzieren der Join-Bedingung in der ON-Klausel behält der linke Join alle Zeilen aus der Tabelle jos_hp_properties und filtert nur die Tabelle jos_hp_properties2 basierend auf dem übereinstimmenden Feldwert. Dadurch wird sichergestellt, dass alle Zeilen aus der ersten Tabelle zurückgegeben werden, auch wenn einige keine entsprechende Zeile in der zweiten Tabelle haben.
Das obige ist der detaillierte Inhalt vonWarum geben meine MySQL LEFT JOIN-Abfragen weniger Zeilen zurück als erwartet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!