如何在in子句presto中提供数组



我有以下查询

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

我的意图是从表2中获得电子邮件值等于的所有NUMid的列表xyz@gmail.com并使用NUMid的那些列表从表1进行查询。

但我得到了以下错误:

对于IN表达式,子查询的值和结果必须是相同的类型:bigint vs array(bigint(

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

如果我理解正确,您甚至不需要在这里调用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');

相关内容

  • 没有找到相关文章

最新更新