Die folgende Abfrage ist für mich verwirrend. Es tut nicht zeigen Sie alle Zeilen in der products
Tabelle, wenn ich WHERE (inventory_to_pos.POSID IS NULL OR inventory_to_pos.POSID = ?)
tun und binden Sie eine POSID
, die möglicherweise in inventory_to_pos
nicht vorhanden sein kann. Wenn LEFT JOIN
eine Tabelle, sollte ich nicht alle Zeilen aus der ursprünglichen Tabelle, wenn ich nur auf die ursprüngliche Tabelle filtern und verwenden IS NULL
unter allen Bedingungen für LEFT JOIN
'ed Tabellen?LEFT JOIN löscht Zeilen ohne ursprüngliche Tabelle zu filtern
SELECT products.ID,products.NAME,products.VOLUME,productcombinations.PRODUCTID,productcombinations.PART,inventory_to_pos.FULLCOUNT
FROM products
LEFT JOIN productcombinations ON products.ID = productcombinations.PARTOF
LEFT JOIN inventory_to_pos ON products.ID = inventory_to_pos.PRODUCT
WHERE products.INVENTORY = 1
AND products.AVAILABLE = 1
AND products.ID > 0
AND (inventory_to_pos.POSID IS NULL OR inventory_to_pos.POSID = ?);
In dem Fall, wo inventory_to_pos.PRODUCT
und inventory_to_pos.POSID
nicht für das angegebene Produkt und POSID existieren, ich bin keine Zeilen gegeben. Warum?
LEFT JOIN + WHERE = INNER (über gleiche Tabelle) JOIN, so setzen diese zusätzlichen condititions in LEFT JOIN-Anweisung. – mitkosoft
Wie ist das gleich? Ich verwende nicht WHERE in der Spalte, die links verbunden ist? Können Sie ein Beispiel dafür zeigen, was Sie meinen? – nickdnk
Sie versuchen 'WHERE inventory_to_pos.POSID ist NULL', richtig? – mitkosoft