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
让我们看下面的例子。查询结果(join/left/right)
如您所见,我们有 2 个评估,它们的详细信息在另一个表中。这是你想要得到的东西。如果您有兴趣获得所有包含详细信息(问题)的评估。你做一个简单的连接。如果您想获得所有评估,即使是那些没有答案的评估,您也可以在#Evaluation 和#EvaluationDetails 之间进行左连接。如果您想获得所有问题,即使是没有评估的问题,您也可以正确加入。
这就是连接的工作方式。当然,如果您切换表并将#EvaluationDetails 与#Evaluation 连接,您也会切换连接,因此左连接变为右连接,右连接变为左连接。