【发布时间】:2012-11-21 13:44:45
【问题描述】:
我遇到了一个问题,经过多次失败尝试后我似乎无法解决。
我需要对三个表进行连接以进行某些报告,而在第二个表中可能不存在记录。如果记录不存在,我需要为来自第三张表的数据报告一个空值。
这是最基本的表格结构(用于调查)
表 A(调查) ---------------------- 调查编号 |调查 ID 016243023708 1152010 表 B(响应) ---------------------------------- 调查 ID |问题 ID |响应 ID 1152010 1279235 486 表 C(响应值) -------------------- 响应 ID |价值 486 是的解释为什么表 B 中可能不存在记录只是因为在调查完成时插入了值。如果用户没有完成就离开调查(他们可以稍后回来),表 B 中的记录将不存在。为此,表 C 中的值应报告为 null。
如果它更容易,我需要专门为 questionid 1279235 做报告。
这是我到目前为止提出的查询(它向我显示了除了表 b 中问题 1279235 中缺少记录的调查之外的所有内容)。
SELECT A.SurveyNumber, A.SurveyId, B.QuestionID, C.Value
FROM tblA A
LEFT JOIN tblB B
ON A.SurveyId = B.SurveyId
LEFT JOIN tblC C
ON B.ResponseId = C.ResponseId
WHERE B.QuestionId = 1279235
如果需要,我可以提供更多说明。
提前致谢
【问题讨论】:
-
当您在 where 子句中对外部表添加过滤器时,您已将外部联接变为内部联接。过滤外部表的正确方法是使过滤条件成为联接的一部分,而不是位置。我认为这两个答案都正确。
标签: sql sql-server join