Frage

Ich habe 2 Tabellen (es gibt mehr, aber un zu Frage bezogen) optionValue und productStock

Ich mag die Option Namen aus der Option Tisch bekommen für jeden option1, option2, option3 (die Abfrage unten werden soll mehr Sinn machen, helfen)

unten ist mein Versuch, die aktuelle Abfrage funktioniert nur, wenn alle Optionen eingestellt werden, ist aber gibt null zurück, wenn eine Option nicht gesetzt ist:

    SELECT s.option1, n1.name s.optionName1, 
           s.option2, n2.name s.optionName2,
           s.option3, n3.name s.optionName3
    FROM productStock as s 
    INNER JOIN optionValue n1 on s.option1 = v1.optionValueID
    INNER JOIN optionValue n2 on s.option2 = v2.optionValueID
    INNER JOIN optionValue n3 on s.option3 = v3.optionValueID
    WHERE s.productStockID = 1

Ich verstehe, warum es nicht funktioniert, weil, wenn die Option null ist Ther keine Übereinstimmungen mit der optionValue Tabelle ist aber im nicht sicher, wie man es beheben (wenn es fixierbar ist)

las ich in ein paar Orten, über die Verwendung von IN oder COALESCE, aber ich verstehe nicht, wie sie verwenden.

War es hilfreich?

Lösung

Was Sie wirklich brauchen sie zuerst Ihre Datenbank-Design zu korrigieren. Immer, wenn Sie Felder wie folgt aus: s.option1, s.option2, s.option3

Dann, was Sie wirklich brauchen, ist ein Kind Tabelle, die die Informationen zu speichern. Was passiert, wenn Sie 6 Optionen benötigen oder 25? Dies ist ein sehr schlechtes Datenbank-Design und wird kein Ende der Probleme incuding die ineffiziente Abfrage führt, dass Sie jetzt zu schreiben. Dies ist ein Krebs im Herzen des Systems und muss repariert werden, bevor irgendetwas anderes getan wird.

Andere Tipps

Es scheint, wie einige Ihrer Syntax etwas falsch ist.

Abgesehen davon, dass Sie LEFT OUTER JOIN statt INNER JOIN.

Visuelle Erklärung von SQL-Joins .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top