【发布时间】:2018-05-26 23:29:39
【问题描述】:
我对 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
子查询的目的是获取最接近每个question_ask_time 的session_login_time。因此,question 的多行可以具有相同的session_login_time 值。
有人可以帮我找出我上面的代码中缺少的东西吗?如何使我的左连接有效?
非常感谢!
【问题讨论】:
-
实际上,如果我取出第二个连接条件(包含子查询的那个)并将其放在最后的 where 语句之后,那会起作用吗? - 我现在不能测试它,只是想得到你的意见
-
如果您想要由每个表中的一行组成的行,其中两列以某种方式相关,那就是
joinon。此外,如果您希望某个值是子选择中的任何值之一,那就是in。您可以用 Google 重新替换 join、in、标量子查询和彼此存在。
标签: mysql join left-join amazon-redshift