如何关联指定问卷数据至学生主表且保留未受访学生记录?
解决SQL关联问卷表时保留未受访学生且避免冗余的问题
问题分析
你的核心矛盾在于:用LEFT JOIN后加WHERE子句会过滤掉未参与目标问卷的学生(这类行的t2字段为NULL,WHERE条件会直接排除);但去掉WHERE又会引入其他问卷问题的冗余数据,导致数据集膨胀。
解决方案
把针对Table2的筛选条件(目标问题、可选的日期限制)移到LEFT JOIN的ON子句中,而非放在WHERE里。这样既能保留Table1的所有学生行,又只会关联符合条件的问卷记录,彻底避免冗余。
最终SQL语句
SELECT t1.*, t2.Response AS GPA_3_0_Response FROM Table_1 t1 LEFT JOIN Table_2 t2 ON t1.ID = t2.ID AND t2.Question = 'Did you receive a GPA of 3.0 or higher?' -- 可选:如果需要严格匹配问卷发放时间范围,添加以下条件 AND t1.Date >= '2023-04-01'
原理说明
LEFT JOIN的ON子句是关联时的匹配规则:只有当Table2的记录同时满足ID匹配、问题为目标问题(以及可选的日期条件)时,才会和Table1的行关联。不满足条件的Table1行依然会被保留,对应的t2字段值为NULL,正好符合2023年4月1日前学生的字段设为NULL的需求。- 原来的
WHERE子句是关联后的过滤规则:会把所有t2.Question为NULL的行(也就是未受访的学生)直接排除,这就是你丢失学生1和2的原因。 - 给
Response起别名(GPA_3_0_Response)可以让结果集的字段含义更清晰,同时不需要保留t2.Question字段(因为我们只筛选这一个问题,该字段值固定),进一步减少冗余。
内容的提问来源于stack exchange,提问作者learning to code
相关产品推荐
相关产品推荐

