Leerer Set beim Auswählen von Daten in der MySQL Relational Database
-
19-09-2019 - |
Frage
Ich habe eine relationale MySQL -Datenbank mit Dutzenden von Tabellen ... meine Abfrage ist 1000 Fuß lang und wählt Daten aus fast allen Tabellen aus ... Ich habe auch meine Haupttabelle und alle anderen Tabellen beziehen sich auf diese. Wenn ich eine Zeile in meiner Haupttabelle eingehe und wenn ich alle Beziehungen für diese Zeile in anderen Tabellen erstelle, funktioniert meine Abfrage einwandfrei. Wenn ich jedoch eine Zeile in Haupttabelle eingehe und nirgendwo sonst leer werde, werde ich leeres Set. Aber ich möchte mindestens diese Informationen in meinem Ergebnis erhalten. Oder natürlich alle Informationen, die in andere Tabellen eingegeben werden, unabhängig davon, dass einige Tabellen keine Informationen für diesen Datensatz (Zeile) haben ...
Danke für die Hilfe!
Aktualisieren:
Ich verwende keine Join -Syntax und meine Abfrage sieht dazu ähnlich aus:
$query = "SELECT a.*, b.*, c.*, d.*, e.*, f.*";
$query .= " FROM a, b, c, d, e, f";
$query .= " WHERE a.aID = b.aID";
$query .= " AND b.bID = c.bID";
$query .= " AND b.bID = d.bID";
$query .= " AND b.bID = e.bID";
$query .= " AND b.bID = f.bID";
Lösung
Ihre Frage ist vorerst sehr vage, aber höchstwahrscheinlich liegt es an der Tatsache, dass Sie verwenden INNER JOIN
s anstelle der LEFT JOIN
s.
Diese Abfrage:
SELECT *
FROM main
JOIN secondary
ON secondary.main_id = main.id
wird nichts zurückgeben, wenn secondary
ist leer.
Diese Abfrage:
SELECT *
FROM main
LEFT JOIN
secondary
ON secondary.main_id = main.id
wird zurückkehren wenigstens ein Datensatz für jeden Datensatz in main
, Sekundärfelder durch Ersetzen NULL
s Wenn es keine passenden Datensätze in gibt secondary
.
Aktualisieren:
Implizit JOIN
Sie verwenden syntax (aufzählen Sie die Tabellen und Bereitstellung der Bereitstellung JOIN
Bedingungen in der WHERE
Klausel) nimmt an INNER JOIN
s.
Vorausgesetzt, dass a
Ist die "Haupt" -Tabelle, schreiben Sie Ihre Abfrage als Folgendes neu:
SELECT a.*, b.*, c.*, d.*, e.*, f.*
FROM a
LEFT JOIN
b
ON b.aID = a.aID
LEFT JOIN
с
ON c.bID = b.bID
LEFT JOIN
d
ON d.bID = b.bID
LEFT JOIN
e
ON e.bID = b.bID
LEFT JOIN
f
ON f.bID = b.bID