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";
War es hilfreich?

Lösung

Ihre Frage ist vorerst sehr vage, aber höchstwahrscheinlich liegt es an der Tatsache, dass Sie verwenden INNER JOINs anstelle der LEFT JOINs.

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 NULLs 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 JOINs.

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top