我对Redshift SQL还是很陌生,一直在尝试弄清楚我的语法出了什么问题。
我的任务是通过左连接联接2个表:question
和user
,因为我想保留表question
中的所有值。
目前,它会引发以下错误消息:当我使用[Amazon](500310) Invalid operation: This type of correlated subquery pattern is not supported yet;
时,会显示left join
。另一方面,当我将代码更改为join
时,它可以正常工作。我怀疑这是因为我的子查询中有聚合的函数和逻辑表达式,使左连接成为内部连接。
但是如上所述,我需要保留表question
中的所有值。
下面是我的代码
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
子查询的目的是获得与每个
session_login_time
最接近的question_ask_time
。因此,question
的多行可以具有相同的session_login_time
值。有人可以帮我确定以上代码中缺少的内容吗?如何使我的左联接起作用?
非常感谢!
最佳答案
我想应该不涉及子查询就能获得相同的结果
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
关于mysql - Redshift-SQL左联接不适用于相关子查询和聚合函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47786857/