我有一个主表,表 1,其中包含学生 ID 和一些其他信息的列。还有表 2,其中包括学生 ID、调查问题和回复列。
本质上,我想将表 2 附加到表 1 中,但是:
表1示例:
身份证 | 日期 |
---|---|
1 | 03/01/23 |
2 | 03/05/23 |
3 | 04/10/23 |
4 | 04/12/23 |
5 | 04/21/23 |
表2示例:
身份证 | 日期 | 问题 | 回应 |
---|---|---|---|
1 | 03/01/23 | 你几年级? | 9 |
2 | 03/05/23 | 你几年级? | 10 |
3 | 04/10/23 | 你几年级? | 11 |
3 | 04/10/23 | 您的 GPA 是否达到 3.0 或更高? | 是的 |
4 | 04/12/23 | 你几年级? | 9 |
4 | 04/12/23 | 您的 GPA 是否达到 3.0 或更高? | 是的 |
5 | 04/21/23 | 你几年级? | 11 |
5 | 04/21/23 | 您的 GPA 是否达到 3.0 或更高? | 没有 |
所需输出示例:
身份证 | 日期 | 问题 | 回应 |
---|---|---|---|
1 | 03/01/23 | 您的 GPA 是否达到 3.0 或更高? | 空 |
2 | 03/05/23 | 您的 GPA 是否达到 3.0 或更高? | 空 |
3 | 04/10/23 | 您的 GPA 是否达到 3.0 或更高? | 是的 |
4 | 04/12/23 | 您的 GPA 是否达到 3.0 或更高? | 是的 |
5 | 04/21/23 | 您的 GPA 是否达到 3.0 或更高? | 没有 |
如何才能将这个问题只提取到我的结果中,而不排除没有被问到的学生?如果我添加 WHERE 子句:
SELECT t1.*, t2.Question, t2.Response
FROM Table_1 t1
LEFT JOIN Table_2 t2
ON t1.ID = t2.ID
WHERE t2.Question IN ('Did you receive a GPA of 3.0 or higher?')
然后它将排除学生 1 和 2。如果我不添加 WHERE 子句,那么它将引入所有调查问题,在我的真实数据集中,每个学生将生成 100 多行,这也给我留下了大数据集。
不要使用
WHERE
而是将该条件添加到 ON 子句中,例如
SELECT T1.*, t2.Question, t2.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?')