INNER,LEFT或RIGHT JOIN获取列值

时间:2018-03-15 23:55:54

标签: sql sql-server join

我在SQL Server 2012中有4个表。这是我的图表:

enter image description here

我有这个问题:

SELECT 
    pc.Product_ID, d.Dept_ID, c.Category_ID, sc.SubCategory_ID 
FROM 
    dbo.ProductConfiguration pc
INNER JOIN 
    dbo.SubCategory sc ON sc.SubCategory_ID = pc.SubCategory_ID
INNER JOIN 
    dbo.Category c ON c.Category_ID = sc.Category_ID
INNER JOIN 
    dbo.Department d ON d.Dept_ID = c.Dept_ID
WHERE 
    pc.Product_ID = 459218

获取列值的最佳方法是什么(INNER,LEFT,RIGHT)?我需要小心表现

非常感谢

3 个答案:

答案 0 :(得分:0)

这与表现无关。

我认为每个产品都属于属于属于某个部门的类别的子类别。所以你内连接所有表;这是正常的事情。

如果其中一个实体不是强制性的,而是可选的,那么有些类别不属于某个部门 1 ,但您仍然希望显示该行,那么您&# 39; d外连接表。您在部门上使用左外连接。我们从不使用右外连接,因为它们应该更难阅读,并且它们与左连接基本相同。

1)即category.dept_id coud为null

答案 1 :(得分:0)

您的查询最佳变体是LEFT JOIN,因为它不会丢失您的信息

答案 2 :(得分:0)

我建议您在需要更新效果时使用执行计划。使用执行计划,您可以了解行为。它将为未来提供帮助。 谢谢!