2017-05-17 3 views
0

Ich versuche, alle Zeilen in der Inventory-Tabelle mit der Beschreibung aus der Teile-Tabelle ausgeben. Hier sind die Tabellen:mySQL Query LINKS OUTER JOIN nicht Null

Inventar Tabelle

Inventory Table

Parts Tabelle

enter image description here

Was ich will, ist die gesamte Ausgabe des gesamten SKUs aus den Bestands Reihen zu haben, die eine haben spezifische Bestellnummer mit der Beschreibung der Artikelnummer daneben. Wenn die Inventar-SKU nicht mit einer Teil-SKU übereinstimmt, muss die Beschreibung als NULL ausgegeben werden.

Hier ist meine vorhandene Abfrage:

SELECT * FROM inventory LEFT OUTER JOIN parts ON inventory.sku = parts.sku AND parts.description IS NULL WHERE orderID = $orderID 

bitte helfen.

+0

Basierend auf Informationen Id sagen, Sie haben eine von zwei Probleme: 1) die SKU in einem oder beiden der Tabellen hat Zeichen nicht Anzeige keine Datensätze verursacht passen. 2) Die $ orderID, die übergeben wird, stimmt mit keinen Datensätzen überein. Ich würde die Abfrage ohne die WHERE-Klausel ausführen, wenn Sie keine Datensätze erhalten. Wenn keine Datensätze zurückgegeben werden, müssen Sie nicht angezeigte Zeichen in der SKU verarbeiten. vielleicht die Datensätze trimmen, um Leerzeichen zu entfernen? Wenn Sie Datensätze erhalten, ist die von Ihnen übergebene $ OrderID ungültig. Likley 2., da ein linker Join mindestens Inventar zurückgeben sollte. – xQbert

Antwort

1

Sie sollten die parts.description IS NULL Zustand Ihrer where Klausel bewegen, weil während keiner der Reihen auf der rechten Tabelle haben Beitritt null auf seinen Feldern

SELECT * 
FROM inventory 
LEFT OUTER JOIN 
     parts 
ON  inventory.sku = parts.sku 
WHERE orderID = $orderID AND 
     parts.description IS NULL 

bearbeiten

besser auf Ihre Anforderungen Lesen, scheint, dass Sie alle Zeilen aus der linken Tabelle möchten, unabhängig davon, ob sie in der rechten Tabelle übereinstimmen oder nicht. Wenn das der Fall ist, können Sie loswerden dieser Zustand erhalten insgesamt

SELECT * 
FROM inventory 
LEFT OUTER JOIN 
     parts 
ON  inventory.sku = parts.sku 
WHERE orderID = $orderID 
+0

das hat nicht funktioniert. Es gab nichts zurück. – ggntc

+0

Haben Sie auch die zweite Version ausprobiert? –

+0

Das war mein erster Versuch. Damit war alles, was ich bekam, die Reihe mit der SKU 11111, denn das ist der einzige Eintrag, wo es eine Beschreibung für die SKU gibt. Fast wie ein INNERER JOIN. – ggntc