动态 SQL 在 Snowflake 中生成一系列 'LIKE' 语句
Dynamic SQL to generate a series of 'LIKE' statements in Snowflake
在 Snowflake 中,我有一个 table 填充了我想从我的数据集中排除的名字,但有些名字只是电子邮件域,所以我想使用 ilike 语句来排除它们。
我想使用带有部分名称的 table 作为排除列表,这样我就不需要维护类似的声明。例如,如果我有以下 2 tables:
CREATE or REPLACE TABLE test ( id number, last_name varchar, first_name varchar )
as SELECT * FROM VALUES
(1, 'Goehan', 'Aylin'),
(2, 'Jacobs', 'Alvin'),
(3, 'Kong', 'Jackie'),
(4, 'Yong', 'Steve'),
(5, 'Joe', 'Black');
CREATE or REPLACE TABLE test_excludes ( excl_last varchar )
as SELECT * FROM VALUES
('ong'),
('oe');
我想做的是排除 'Yong'、'Kong'、'Goehan' 和 'Joe'。但是,我认为如果我做某种可能效率低下的笛卡尔连接,所以我想知道是否可以使用动态 SQL 来创建使用 Snowflake 的 ilike 语句。
LEFT JOIN 就足够了:
SELECT t.*
FROM test t
LEFT JOIN test_excludes e
ON t.last_name ILIKE '%' || e.excl_last -- || '%' -- if anywhere in the string
WHERE e.excl_last IS NULL;
输出:
在 Snowflake 中,我有一个 table 填充了我想从我的数据集中排除的名字,但有些名字只是电子邮件域,所以我想使用 ilike 语句来排除它们。
我想使用带有部分名称的 table 作为排除列表,这样我就不需要维护类似的声明。例如,如果我有以下 2 tables:
CREATE or REPLACE TABLE test ( id number, last_name varchar, first_name varchar )
as SELECT * FROM VALUES
(1, 'Goehan', 'Aylin'),
(2, 'Jacobs', 'Alvin'),
(3, 'Kong', 'Jackie'),
(4, 'Yong', 'Steve'),
(5, 'Joe', 'Black');
CREATE or REPLACE TABLE test_excludes ( excl_last varchar )
as SELECT * FROM VALUES
('ong'),
('oe');
我想做的是排除 'Yong'、'Kong'、'Goehan' 和 'Joe'。但是,我认为如果我做某种可能效率低下的笛卡尔连接,所以我想知道是否可以使用动态 SQL 来创建使用 Snowflake 的 ilike 语句。
LEFT JOIN 就足够了:
SELECT t.*
FROM test t
LEFT JOIN test_excludes e
ON t.last_name ILIKE '%' || e.excl_last -- || '%' -- if anywhere in the string
WHERE e.excl_last IS NULL;
输出: