在 Presto 中,如何检查我通过子查询获取的列表中是不是存在数组中的元素

Posted

技术标签:

【中文标题】在 Presto 中,如何检查我通过子查询获取的列表中是不是存在数组中的元素【英文标题】:In Presto how can I check if an element in an array is present in a list I acquire via a subquery在 Presto 中,如何检查我通过子查询获取的列表中是否存在数组中的元素 【发布时间】:2021-09-20 07:16:54 【问题描述】:

这是一个 Presto SQL 问题。

我有一个表 Test,其中包含一个名为 mitigations 的数组字段。

如何检查该数组中是否有任何元素存在于子查询中

(select distinct(ID) from other_table)?

【问题讨论】:

【参考方案1】:

使用ANY函数检查数组中是否有元素

考虑以下示例

CREATE TABLE sal_emp (
    name            text,
    pay_by_quarter  integer[]
);

INSERT INTO sal_emp
    VALUES 
    ('Bill','40000, 10000, 30000, 10000'),
    ('Jack','10000, 50000, 20000, 10000');

我们要检查数组中是否有 10,000 个数字

SELECT * FROM sal_emp
where 10000 = ANY (pay_by_quarter);

上面的查询换个方式

SELECT name FROM sal_emp
WHERE pay_by_quarter IN
(SELECT pay_by_quarter FROM sal_emp WHERE 10000 = ANY (pay_by_quarter));

Declaration of Array Types

Array Functions and Operators

【讨论】:

我在将这个想法应用到我的情况时遇到了麻烦。我的清单来自另一张桌子。如果我可以将该列表转换为数组,我可以执行“arrays_overlap”函数。

以上是关于在 Presto 中,如何检查我通过子查询获取的列表中是不是存在数组中的元素的主要内容,如果未能解决你的问题,请参考以下文章

如何在毯子[]中获取文本(Presto)

SQL Presto:不支持相关子查询

检查 Presto 值映射中是不是存在键

通过 PRESTO 连接器选择随机数据样本

如何在子查询中使用主查询中的列?

Presto worker 宕机时查询超时