我对Redshift SQL还是很陌生,一直在尝试弄清楚我的语法出了什么问题。

我的任务是通过左连接联接2个表:questionuser,因为我想保留表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/

10-09 20:11
查看更多