Ich habe ein Problem, das Ergebnis von einer SQL-Abfrage zu erhalten. Ich brauche das Ergebnis von zwei Where-Klauseln. Ich arbeite mit SQLServer2014Join 3 Tabellen mit 2 Where-Klauseln bekommen Null Ergebnisse
tabelle1: Produkt
ProductID
1
2
3
4
5
table2: Lieferant
SupplierID
1
2
3
table3: Product_Supplier
ProductSupplierID|ProductID|SupplierID|Reference
1 |1 |1 |Ref001
2 |1 |2 |Ref002
3 |2 |1 |Ref003
4 |3 |2 |Ref004
5 |4 |2 |Ref005
Was ich will, ist führen, wenn ich gesetzt:
wo (ProductID < 4) und (SupplierID = 2)
ich als Ergebnis erhalten muss: Alle Produkte unter dem ProductID 4 im Zusammenhang mit SupplierID 2, wenn dies nicht in Product_Supplier nicht vorhanden ist, muss ich Referenz = Null
ProductID|SupplierID|Reference
1 |2 |Ref002
2 |2 |Null
3 |2 |Ref004
bekomme ich einige sQL-Skript zu starten, aber ich kann nicht das richtige Ergebnis
erhaltenselect a.ProductID, b.SupplierID, C.Reference from Product as a
left outer join Product_Supplier as c on c.ProductID= a.ProductID
left outer join Supplier as B on b.SupplierID = c.SupplierID
where a.ProductID<4 and b.SupplierID=2
Antwort von Felix Pamittan:
SELECT
t.*,
ps.Reference
FROM (
SELECT *
FROM Product
CROSS JOIN Supplier
WHERE
ProductID < t.ProductID
AND SupplierID = t.SupplierID
) t
LEFT JOIN Product_Supplier ps
ON ps.ProductID = t.ProductID
AND ps.SupplierID = t.SupplierID
Auf diesem Skript kann ich nicht die Laufzeit in dem Code einzuspeisen hinzufügen. Wenn ich festlegen kann, wo am Ende der SQL-Adresse der Endbenutzer die Where-Parameter einfügen kann.
SELECT
t.*,
ps.Reference
FROM (
SELECT *
FROM Product
CROSS JOIN Supplier
--WHERE
-- ProductID < t.ProductID
-- AND SupplierID = t.SupplierID
) t
LEFT JOIN Product_Supplier ps
ON ps.ProductID = t.ProductID
AND ps.SupplierID = t.SupplierID
where t.ProductID < 4
and t.SupplierID=2
werde ich diese letzte auf der realen Datenbank testen.
SELECT * FROM Product_Supplier WHERE ProductId <4 UND SupplierID = 2' –
Das Problem, das ich die zweite Reihe bekommen (2,2, null) – Ravaut123
gerade richtig ich wenn ich falsch liege; Es gibt keine Tupel in Product_Supplier, wo die ProductId und SupplierId beide 2 sind ... Wenn das Tupel nicht vorhanden ist, wird es nie ausgewählt. Das heißt, wenn die Produkttabelle mit Product_Supplier verbunden wird, dann wird SupplierId gleich Null sein und ebenfalls für das Tupel mit SupplierId = 2, dann wird ProductId null sein. Ihre beste Wette könnte eine For-Schleife sein? Aber das ist ziemlich hässlich. – JonSick