2017-01-08 2 views
0

Wenn Bedingung LEFT JOIN falsch ist, wie man es null macht, anstatt es zu überspringen? Dies ist Teil des Codes:Wenn Bedingung LEFT JOIN falsch ist, wie man es null macht, anstatt es zu überspringen?

SELECT 
    c.Name, 
    p.Name 
FROM Category c 
LEFT JOIN ProductCategory pc ON c.CategoryID = pc.CategoryID 
LEFT JOIN Product p ON pc.ProductID = p.ProductID 
WHERE pc.ProductID = 17; 

Ergebnis sein muss:

FirstCategory SeventeenProduct 
SecondCategory SeventeenProduct 
ThirdCategory null 
FourthCategory SeventeenProduct 

Und so weiter

Antwort

1

äußere Verbindung finden Sie alle Datensätze aus Haupttabelle und passende Datensätze aus verknüpften Tabelle geben. Sie wollen auch die Bedingung where-join on Zustand zu bewegen, sonst wäre der Effekt als inner join

SELECT 
    c.Name, 
    p.Name 
FROM Category c 
LEFT JOIN ProductCategory pc ON c.CategoryID = pc.CategoryID 
AND pc.ProductID = 17 
LEFT JOIN Product p ON pc.ProductID = p.ProductID; 
0

gleich sein ehrlich zu sein, würde ich die Abfrage mit p.ProductId schreiben:

SELECT c.Name, p.Name 
FROM Category c LEFT JOIN 
    ProductCategory pc 
    ON c.CategoryID = pc.CategoryID LEFT JOIN 
    Product p 
    ON pc.ProductID = p.ProductID AND p.ProductID = 17; 

Dies ist funktional genau das gleiche wie den Vergleich mit 17 in der ersten ON. Allerdings finde ich diese Version leichter zu folgen.

Verwandte Themen