如果条件LEFT JOIN为false,如何使其为null而不是跳过它?

时间:2017-01-08 19:33:46

标签: sql

如果条件LEFT JOIN为false,如何使其为null而不是跳过它? 这是代码的一部分:

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

等等

2 个答案:

答案 0 :(得分:1)

外部联接将为您提供主表中的所有记录以及来自联接表的匹配记录。您还希望将条件从where移至join 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;

答案 1 :(得分: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进行比较完全相同。但是,我觉得这个版本更容易理解。