2017-01-24 14 views
2

1つのサードパーティに関連付けられているが他のサードパーティに関連付けられていないfirst_party_idのIDの重複しないセットを与えるクエリを実行しています。 Correlated queries not yet supported.AWS Athenaのネストされたクエリの代替方法

は、ネストされたクエリの代替のために、prestodbドキュメント、https://prestodb.io/docs/current/sql/select.html(アテナは、ボンネットの下prestodbである)を見ていた:このクエリはエラーを与えて、しかし、アテナでは実行されません。 with statement例は、このnot in節ではうまく翻訳されていないようです。ネストされたクエリの代わりになるものを探してみましょう。

SELECT 
     COUNT(DISTINCT i.third_party_id) AS uniques 
FROM 
     db.ids i 
WHERE 
     i.third_party_type = 'cookie_1' 
     AND i.first_party_id NOT IN (
      SELECT 
      i.first_party_id 
      WHERE 
      i.third_party_id = 'cookie_2' 
     ) 

答えて

2

これを行うにはより良い方法があるかもしれません - 私もそれを見て好奇心が強いでしょう!私が考えることのできる1つの方法は、外部結合を使用することです。 (私はあなたのデータがどのように構造化されているか正確には分からないので、実例を許してください。しかし、それは大丈夫です)。

with 
    a as (select * 
     from (values 
     (1,'cookie_n',10,'cookie_2'), 
     (2,'cookie_n',11,'cookie_1'), 
     (3,'cookie_m',12,'cookie_1'), 
     (4,'cookie_m',12,'cookie_1'), 
     (5,'cookie_q',13,'cookie_1'), 
     (6,'cookie_n',13,'cookie_1'), 
     (7,'cookie_m',14,'cookie_3') 
     ) as db_ids(first_party_id, first_party_type, third_party_id, third_party_type) 
    ), 
    b as (select first_party_type 
     from a where third_party_type = 'cookie_2'), 
    c as (select a.third_party_id, b.first_party_type as exclude_first_party_type 
     from a left join b on a.first_party_type = b.first_party_type 
     where a.third_party_type = 'cookie_1') 
select count(distinct third_party_id) from c 
     where exclude_first_party_type is null; 

これが役に立ちます。

+0

ええ、声明で理解した方法はあります!また、次のような文を入れ子にすることもできます - > 'xを(yを(...)、zを(...) – pauld

関連する問題