如果条件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
等等
答案 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进行比较完全相同。但是,我觉得这个版本更容易理解。