【问题标题】:Dynamic SQL to generate a series of 'LIKE' statements in Snowflake在 Snowflake 中生成一系列“LIKE”语句的动态 SQL
【发布时间】:2021-11-03 22:51:07
【问题描述】:

在 Snowflake 中,我有一个表格,其中包含我想从我的数据集中排除的名称,但有些名称只是电子邮件域,所以我想使用 ilike 语句来排除它们。

我想使用包含部分名称的表格作为排除列表,这样我就不需要维护 like 语句。例如,如果我有以下 2 个表:

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 语句。

【问题讨论】:

    标签: snowflake-cloud-data-platform dynamic-sql


    【解决方案1】:

    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;
    

    输出:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 2019-03-21
      • 2020-09-27
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多