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

问题描述

我有以下查询

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 子句不能接受数组。是否有解决此问题的方法

解决方法

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...