sql - 如何在 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');
推荐阅读
- php - 与使用三个 SQL 查询将信息从数据库中提取到 html 列中的冲突
- javascript - CSS 变换平移和缩放交互
- makefile - make/gmake:给定一个以多个../开头的变量,创建一个少一个../的变量
- python-3.x - 在 Python 中使用 df.shift 遍历列
- c# - 如何检测是否安装了 Powershell Core 以及 C# 中的哪个版本?
- amazon-web-services - NoSuchKey:指定的密钥不存在 AWS S3 Codebuild
- python - 为什么程序没有从字符串中找到任何电子邮件?
- c# - 如何禁用模型验证以允许流畅的验证检查
- php - 将列的格式更改为日期时间 MySql
- logging - ELK Stack 的 Grok 条件解析