这是查找两个字符串列重叠的有效方法吗

问题描述 投票:0回答:1

我有一张包含

name
full name
列的表格,并且有兴趣知道其中一个是否是另一个的一部分(但它们不相等)。
示例:

name        |  full name      |  is_subset
-------------------------------------------
john smith  |  john smith     |  false
john smith  |  john h. smith  |  true
john smith  |  alice jones    |  false

我找到了一种使用

SPLIT
和数组交集的方法,但很好奇是否有更简单或更有效的方法。

SELECT 
name,
full name,
CARDINALITY(
    (
        ARRAY_INTERSECT(
            SPLIT(name, ' '),
            SPLIT(full name, ' ')
        )
    )
) = CARDINALITY(SPLIT(name, ' ')) AND CARDINALITY(
    SPLIT(full name, ' ')
) > CARDINALITY(SPLIT(name, ' ')) AS is_subset
from t
sql presto set-intersection
1个回答
0
投票
ARRAY_EXCEPT(
   SPLIT(name, ' '),
   SPLIT(fullname, ' ')
)
=
ARRAY []

AND

ARRAY_EXCEPT(
   SPLIT(fullname, ' '),
   SPLIT(name, ' ')
)
!=
ARRAY []

第二个条件可能可以简化为...

AND

LEN(name) < LEN(fullname)
© www.soinside.com 2019 - 2024. All rights reserved.