Snowflake cloud data platform SQL:如何为WHERE列表多次引用用户输入?

Snowflake cloud data platform SQL:如何为WHERE列表多次引用用户输入?,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,因此,我不确定要使用的流行语是否正确,但如何在查询顶部使用单个输入,然后在整个查询中多次使用?我希望减少和限制下一个用户出现错误和缺少筛选条目的风险 where column1 in ('a','b',...'n') 将其分配给SQL文件顶部的变量或其他内容,以限制错误风险。以下是我以前使用SPLIT_to_TABLE函数执行此操作的示例 CREATE OR REPLACE TEMPORARY TABLE tmp_names (fname varchar(20)); INSERT INTO t

因此,我不确定要使用的流行语是否正确,但如何在查询顶部使用单个输入,然后在整个查询中多次使用?我希望减少和限制下一个用户出现错误和缺少筛选条目的风险

where column1 in ('a','b',...'n')

将其分配给SQL文件顶部的变量或其他内容,以限制错误风险。

以下是我以前使用SPLIT_to_TABLE函数执行此操作的示例

CREATE OR REPLACE TEMPORARY TABLE tmp_names (fname varchar(20));
INSERT INTO tmp_names 
VALUES ('rich'), ('joe'), ('sally'), ('bill'), ('ted');

SELECT * 
FROM   tmp_names
WHERE fname in (
  SELECT t.value 
  FROM   TABLE(SPLIT_TO_TABLE('sally,ted', ',')) as t);--2 records returned

set my_in_stmt = 'sally,ted';
SELECT * 
FROM   tmp_names
WHERE fname in (
  SELECT t.value 
  FROM   TABLE(SPLIT_TO_TABLE($my_in_stmt, ',')) as t); --2 records returned
拆分表格功能的文档位于:

我希望这有助于…Rich

p、 如果这个(或另一个)答案对你有帮助,请花点时间“接受”这个有帮助的答案
通过单击答案旁边的复选标记将其从“灰显”切换到“填充”。

您可以使用values子句将列表放置到CTE表格中,然后对该表格中的选择进行输入

create temporary table foo (column1 string);

insert into foo (column1) values ('1'), ('2'), ('3'), ('a'), ('b'), ('c');

select * from foo where column1 in ('a','b','c','d','e','f','g');

with 
VALUE_LIST(vals) as
(
    select * from values ('a'),('b'),('c'),('d'),('e'),('f'),('g')
)
select * from foo where column1 in (select vals from value_list)

您可以根据需要多次引用CTE中的值列表表,并在一个位置保持更新。

将其分配给变量:您希望分配什么?请向我们展示更多的代码,以便我们了解您正在尝试执行的操作。我编写了一个很长的代码,它使用了多个CTE、条件聚合和联接。目前,我在代码中多次列出了相同的几个WHERE过滤器。有没有一种方法可以在sql文本的顶部识别这个值,然后稍后再引用?因为您已经在使用CTE,也许您可以将in子句中的值设置为自己的CTE表表达式,然后,不重复这些值,只引用CTE表的别名。我该怎么做?@surfer349我将在答案部分列出一个示例。