2017-01-08 44 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比较相同。不过,我觉得这个版本更容易遵循。

相关问题