2017-01-08 62 views
0

如果條件LEFT JOIN爲false,如何讓它爲空而不是跳過它? 這部分代碼:如果條件LEFT JOIN爲false,如何讓它爲空而不是跳過它?

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; 

結果必然是:

FirstCategory SeventeenProduct 
SecondCategory SeventeenProduct 
ThirdCategory null 
FourthCategory SeventeenProduct 

等等

回答

1

外連接會給你從主表和連接表匹配的記錄中的所有記錄。您還希望從wherejoin on狀態運動的條件否則效果會一樣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

說實話,我會用p.ProductId編寫查詢:

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; 

這在功能上完全相同與第一個ON中的17比較相同。不過,我覺得這個版本更容易遵循。

相關問題