SQL中WHERE子句能否简写引用前缀相同、后缀递增的列(如var1~var30)?
避免手动输入var1到var30的SQL解决方案
根据你使用的SQL引擎,有几种方法可以自动生成var1到var30的序列,无需手动逐个输入:
BigQuery
利用GENERATE_ARRAY生成数字序列,再通过FORMAT拼接成变量名:CREATE OR REPLACE TABLE patients AS SELECT DISTINCT id FROM dataset WHERE value IN ( SELECT FORMAT('var%d', num) FROM UNNEST(GENERATE_ARRAY(1, 30)) AS num );Snowflake
使用SEQUENCE生成序列,结合字符串拼接生成变量名:CREATE OR REPLACE TABLE patients AS SELECT DISTINCT id FROM dataset WHERE value IN ( SELECT 'var' || TO_VARCHAR(num) FROM TABLE(SEQUENCE(1, 30)) AS num );PostgreSQL
通过generate_series生成数字序列,转换为文本后拼接:CREATE OR REPLACE TABLE patients AS SELECT DISTINCT id FROM dataset WHERE value IN ( SELECT 'var' || num::TEXT FROM generate_series(1, 30) AS num );
如果你的SQL引擎不支持上述序列生成函数,那确实没有办法完全避免手动输入所有变量名——只能先创建包含这些变量名的临时表或数组,再在主查询中引用,但仍需要一次性输入所有var1到var30的值。
内容的提问来源于stack exchange,提问作者Caitlin Haven
相关产品推荐
相关产品推荐

