【问题标题】:How to provide an array in IN clause presto如何在 IN 子句 presto 中提供数组
【发布时间】:2021-09-19 15:34:10
【问题描述】:

我有以下问题

select * 
from Table1 
where NUMid in (select array_agg(NUMid) 
                from Table2 
                where email = 'xyz@gmail.com')

我的意图是从 table2 中获取电子邮件值等于 xyz@gmail.com 的所有 NUMid 列表,并使用这些 NUMid 列表从 Table1 中查询。

但我收到以下错误:

IN表达式的子查询的值和结果必须是同一类型:bigint vs array(bigint)

基本上IN 子句不能接受数组。有没有解决这个问题的方法。

【问题讨论】:

    标签: sql amazon-athena presto in-clause


    【解决方案1】:

    如果我理解正确,你甚至不需要在这里调用ARRAY_AGG,只需使用标准的WHERE IN (...) 构造:

    SELECT *
    FROM Table1
    WHERE NUMid IN (SELECT NUMid FROM Table2 WHERE email = 'xyz@gmail.com');
    

    您也可以使用存在逻辑来表达这一点,以提高性能:

    SELECT *
    FROM Table1 t1
    WHERE EXISTS (SELECT 1 FROM Table2 t2
                  WHERE t2.NUMid = t1.NUMid AND t2.email = 'xyz@gmail.com');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-09
      • 2010-10-19
      • 2015-05-07
      • 2017-08-23
      • 2021-09-25
      • 1970-01-01
      • 2021-05-01
      相关资源
      最近更新 更多