如何将数据连接到并非每个人都可用的表而不丢失结果?

问题描述 投票:0回答:1

我有一个主表,表 1,其中包含学生 ID 和一些其他信息的列。还有表 2,其中包括学生 ID、调查问题和回复列。

本质上,我想将表 2 附加到表 1 中,但是:

  • 我只想引入“您的 GPA 是否达到 3.0 或更高?”的回复。调查问题。
  • 这个问题在 2023 年 4 月 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 多行,这也给我留下了大数据集。

sql join amazon-athena ansi-sql
1个回答
0
投票

不要使用

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?')
© www.soinside.com 2019 - 2024. All rights reserved.