Mysql Redshift-SQL左联接不适用于相关子查询和聚合函数
我对Redshift SQL非常陌生,一直在试图找出我的语法有什么问题 我的任务是通过左连接连接两个表:question和user,因为我想保留表question中的所有值 此时它抛出以下错误消息:[Amazon]500310无效操作:这种类型的相关子查询模式还不受支持;当我使用左连接时。另一方面,当我更改代码以加入时,它可以正常工作。我怀疑这是因为我的子查询中有一个聚合函数和逻辑表达式,使我的左连接成为内部连接 但正如我上面提到的,我需要保留表问题中的所有值 下面是我的代码Mysql Redshift-SQL左联接不适用于相关子查询和聚合函数,mysql,join,left-join,amazon-redshift,Mysql,Join,Left Join,Amazon Redshift,我对Redshift SQL非常陌生,一直在试图找出我的语法有什么问题 我的任务是通过左连接连接两个表:question和user,因为我想保留表question中的所有值 此时它抛出以下错误消息:[Amazon]500310无效操作:这种类型的相关子查询模式还不受支持;当我使用左连接时。另一方面,当我更改代码以加入时,它可以正常工作。我怀疑这是因为我的子查询中有一个聚合函数和逻辑表达式,使我的左连接成为内部连接 但正如我上面提到的,我需要保留表问题中的所有值 下面是我的代码 select qa
select
qa.user_id as user_email,
i.timestamp as session_login_time,
qa.timestamp as question_ask_time,
qa.question_id,
qa.question
from
schema1.question as qa
left join
schema1.user as i
on
qa.user_id = i.email
and
i.timestamp =
(select
max(timestamp)
from schema1.user
where
timestamp <= qa.timestamp)
where user_email <> 'tester' and user_email not like '%tester.com'
group by qa.user_id, i.timestamp, qa.timestamp, qa.question_id, qa.question
子查询的目的是获取与每个问题询问时间最接近的会话登录时间。因此,多行问题可以具有相同的会话\u登录\u时间值
有谁能帮我找出上面代码中缺少的内容吗?如何使我的左连接工作
非常感谢你 我想这应该可以在不涉及子查询的情况下得到相同的结果
select
qa.user_id as user_email,
max(i.timestamp) as session_login_time,
qa.timestamp as question_ask_time,
qa.question_id,
qa.question
from schema1.question as qa
left join schema1.user as i
on qa.user_id = i.email
and i.timestamp <= qa.timestamp
where qa.user_id <> 'tester' and qa.user_id not like '%tester.com'
group by qa.user_id, qa.timestamp, qa.question_id, qa.question
我想这应该可以在不涉及子查询的情况下得到相同的结果
select
qa.user_id as user_email,
max(i.timestamp) as session_login_time,
qa.timestamp as question_ask_time,
qa.question_id,
qa.question
from schema1.question as qa
left join schema1.user as i
on qa.user_id = i.email
and i.timestamp <= qa.timestamp
where qa.user_id <> 'tester' and qa.user_id not like '%tester.com'
group by qa.user_id, qa.timestamp, qa.question_id, qa.question
事实上,如果我取出第二个连接条件,即包含子查询的连接条件,并将其放在最后的where语句之后,这会起作用吗?-我现在不能测试它,只是想得到您的意见,如果您想要由每个表中的一行组成的行,其中两个列以某种方式相关,这就是连接。此外,如果希望某个值是子选择中的任意一个值,则该值是in。你可以在谷歌上重新替换join、in、scalar子查询&彼此存在。实际上,如果我取出第二个连接条件,即包含子查询的连接条件,并将其放在我的where语句之后,这会起作用吗?-我现在不能测试它,只是想得到您的意见,如果您想要由每个表中的一行组成的行,其中两个列以某种方式相关,这就是连接。此外,如果希望某个值是子选择中的任意一个值,则该值是in。您可以通过google重新替换join、in、scalar子查询&彼此存在。