2017-12-13 115 views
0

Redshift SQLはかなり新しく、構文に何が問題なのかを解明しようとしています。Redshift - SQL Left Joinは、相関サブクエリと集約関数とでは機能しません。

私の仕事はテーブルquestionuserの2つのテーブルを結合することです。テーブル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値を持つことができます。

上記のコードに記載されていないものが見つかりましたか?私は左の結合作業をどのようにするのですか?

ありがとうございました!

+0

を伴うことなく、あなたに同じ結果を得る必要がありますね終わり、それは働くだろうか? - 私は今テストすることはできません。あなたの意見を得たいだけです。 – user7799677

+0

2つの列が何らかの方法で関連している各テーブルの行から構成された行を作成するには、それは 'join'' on'です。また、値をsubselect内のanyのいずれかにしたい場合、それは 'in'です。あなたはjoin join in、スカラーサブクエリ&を互いに置き換えることができます。 – philipxy

答えて

2

私は私が取る場合は実際には、第二の基準(サブクエリを含む1)に参加しての私のどこ文の後にそれを置くことは、サブクエリ

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 
関連する問題