Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 内部、左或右连接以获取列值_Sql_Sql Server_Join - Fatal编程技术网

Sql 内部、左或右连接以获取列值

Sql 内部、左或右连接以获取列值,sql,sql-server,join,Sql,Sql Server,Join,我在SQL Server 2012中有4个表。这是我的图表: 我有一个疑问: 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.Cate

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

我有一个疑问:

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
获取列值的最佳方式(内部、左侧、右侧)是什么?我需要小心表现


非常感谢

这与性能无关

我假设每个产品都属于属于某个部门的子类别。因此,您可以内部联接所有表;这是正常的事情

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


1) 也就是说,category.dept_id可以为空

您的查询最好的变体是LEFT JOIN,从它的“不要丢失您的信息”来看

我建议您,当您需要更新性能时,使用执行计划。使用执行计划,您可以了解这些行为。这将对未来有所帮助。
谢谢大家!

它们有不同的含义;选择哪一个取决于数据的位置和您的需要。看看这个链接,或者在这两篇文章之间,你有超过280万的浏览量。这个问题似乎太宽泛了,或者应该以重复的形式结束。谢谢大家的评论谢谢大家的推荐