6

我遇到了一个问题,经过多次失败的尝试后我似乎无法弄清楚。

我有三个表需要加入一些报告,而在第二个表中可能不存在记录。如果记录不存在,我需要为来自第三个表的数据报告一个空值。

在最基本的形式中,这是表格结构(用于调查)

表 A(调查)
----------------------
调查编号 | 调查 ID
016243023708 1152010

表 B(响应)
----------------------------------
调查 ID | 问题 ID | 响应 ID
1152010 1279235 486

表 C(响应值)
--------------------
响应 ID | 价值
486 是的

要解释为什么表 B 中可能不存在记录,仅仅是因为这些值是在调查完成时插入的。如果用户没有完成就离开调查(他们可以稍后回来),表 B 中的记录将不存在。为此,表 C 中的值应报告为空。

如果它更容易,我需要专门为 questionid 1279235 进行报告。

这是我到目前为止提出的查询(它向我展示了除了问题 1279235 表 b 中缺少记录的调查之外的所有内容)。

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

如果需要,我可以提供更多说明。

提前致谢

4

2 回答 2

10

不要将条件放在 where 子句中,而是放在连接部分,因为tablec可能不存在记录。

SELECT      A.SurveyNumber, A.SurveyId, B.QuestionID, C.Value
FROM        tblA A
            LEFT JOIN   tblB B
                  ON  A.SurveyNumber = B.SurveyNumber AND 
                      B.QuestionId = 1279235
            LEFT JOIN   tblC C
                  ON  B.ResponseId = C.ResponseId
于 2012-11-21T13:48:16.003 回答
2

试试这个:

SELECT
    A.SurveyNumber, A.SurveyId, B.QuestionID, C.Value
    FROM tblA        A
    LEFT JOIN tblB   B ON  A.SurveyId=B.SurveyId AND B.QuestionId=1279235
    LEFT JOIN tblC   C ON  B.ResponseId=C.ResponseId 

编辑工作示例:

DECLARE @tblA  table (SurveyNumber varchar(12),SurveyId int)
INSERT INTO @tblA VALUES ('016243023708',   1152010)
INSERT INTO @tblA VALUES ('016243023708',   1152011)

DECLARE @tblB table (SurveyId int, QuestionId int, ResponseId int)
INSERT INTO @tblB values (1152010,    1279235,      486)
INSERT INTO @tblB values (1152011,    1279235,      487)

DECLARE @tblC  table (ResponseId int, ValueOf varchar(10))
INSERT INTO @tblC values (486,          'Yes')


SELECT
    A.SurveyNumber, A.SurveyId, B.QuestionID, C.ValueOf
    FROM @tblA        A
    LEFT JOIN @tblB   B ON  A.SurveyId=B.SurveyId AND B.QuestionId=1279235
    LEFT JOIN @tblC   C ON  B.ResponseId=C.ResponseId 

输出:

SurveyNumber SurveyId    QuestionID  ValueOf
------------ ----------- ----------- ----------
016243023708 1152010     1279235     Yes
016243023708 1152011     1279235     NULL

(2 row(s) affected)
于 2012-11-21T13:48:31.137 回答