Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Redshift-SQL左联接不适用于相关子查询和聚合函数_Mysql_Join_Left Join_Amazon Redshift - Fatal编程技术网

Mysql Redshift-SQL左联接不适用于相关子查询和聚合函数

Mysql Redshift-SQL左联接不适用于相关子查询和聚合函数,mysql,join,left-join,amazon-redshift,Mysql,Join,Left Join,Amazon Redshift,我对Redshift SQL非常陌生,一直在试图找出我的语法有什么问题 我的任务是通过左连接连接两个表:question和user,因为我想保留表question中的所有值 此时它抛出以下错误消息:[Amazon]500310无效操作:这种类型的相关子查询模式还不受支持;当我使用左连接时。另一方面,当我更改代码以加入时,它可以正常工作。我怀疑这是因为我的子查询中有一个聚合函数和逻辑表达式,使我的左连接成为内部连接 但正如我上面提到的,我需要保留表问题中的所有值 下面是我的代码 select qa

我对Redshift SQL非常陌生,一直在试图找出我的语法有什么问题

我的任务是通过左连接连接两个表:question和user,因为我想保留表question中的所有值

此时它抛出以下错误消息:[Amazon]500310无效操作:这种类型的相关子查询模式还不受支持;当我使用左连接时。另一方面,当我更改代码以加入时,它可以正常工作。我怀疑这是因为我的子查询中有一个聚合函数和逻辑表达式,使我的左连接成为内部连接

但正如我上面提到的,我需要保留表问题中的所有值

下面是我的代码

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子查询&彼此存在。