我必须使用左外连接,我很难找到逻辑,为什么我选择左边的一个表而右边的另一个表,背后有原因吗?
例如。我猜左表应该是一个在连接列中具有NULL值的表
答案 0 :(得分:0)
参考,
区别很简单 - 在左外连接中,无论“右”表中是否存在任何匹配的列,都将显示“左”表中的所有行。在右外连接中,无论“左”表中是否存在任何匹配的列,都将显示“右”表中的所有行。请参阅共享URL中的示例。
请谷歌,你可以找到你需要的。
答案 1 :(得分:0)
CREATE TABLE #Evaluation (ID int IDENTITY(1,1), EvalName varchar(30), EvalDate datetime)
CREATE TABLE #EvaluationDetails (ID int IDENTITY(1,1), EvalID int, Points decimal(22,6), Question varchar(100) )
declare @Date datetime
set @Date = GETDATE()
INSERT INTO #Evaluation VALUES ('Specific question',@Date)
INSERT INTO #EvaluationDetails VALUES (1,10,'First question first evaluation')
INSERT INTO #EvaluationDetails VALUES (1,5,'SEcond question first evaluation')
INSERT INTO #EvaluationDetails VALUES (1,0,'Third question first evaluation')
INSERT INTO #EvaluationDetails VALUES (null,0,'First question therd evaluation')
SELECT * FROM #Evaluation e
join #EvaluationDetails ed on ed.EvalID = e.ID
SELECT * FROM #Evaluation e
left join #EvaluationDetails ed on ed.EvalID = e.ID
SELECT * FROM #Evaluation e
right join #EvaluationDetails ed on ed.EvalID = e.ID
DROP TABLE #Evaluation
DROP TABLE #EvaluationDetails
让我们看一下以下的例子。查询结果(加入/左/右)
因此,您可以看到我们有2个评估,其详细信息在另一个表中。这是你想要得到的东西。如果您有兴趣获得所有具有详细信息(问题)的评估。你做一个简单的连接。如果您想获得所有评估,即使是那些没有答案的评估,您也可以在#Evaluation
和#EvaluationDetails
之间进行左联接。如果您想获得所有问题,即使是那些没有评估的问题,您也可以进行正确的加入。
这是加入工作的方式。当然,如果您切换表并将#EvaluationDetails
加入#Evaluation
,您也可以切换连接,因此左连接变为右连接,右连接变为左连接。